1.什么是Kafka
一个流处理平台具有三个关键能力:
(1)发布和订阅消息(流),在这方面,它类似于一个消息队列或企业消息系统。
(2)以容错(故障转移)的方式存储消息(流)。
(3)在消息流发生时处理它们。
2.Kafka中的基本概念
Producer:消息和数据的生成者,向Kafka的一个topic发布消息的进程/代码/服务
Consumer:消息和数据的消费者,订阅数据(Topic)并且发布其发布的消息的进程/代码/服务
Consumer Grop:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息
Broker:物理概念,Kafka集群中的每个Kafka节点
Topic:逻辑概念,Kafka消息的类别,对数据进行区分、隔离
Partition:物理概念,Kafka下数据存储的基本单元。一个Topic数据,会被分散存储到多个Partion,每一个Partion是有序的
Replication:同一个Partion可能会有多个Replica,多个Replica之间的数据是一样的
Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partion上与Producer和Consumer交互
ReplicaManager:负责管理当前broker所有分区和副本的信息,处理KafkaController发起的一些请求,副本状态的切换、添加/读取消息等
Kafka强依赖于zookeeper
Kafka消息结构
3.Kafka相关API
- 应用程序使用 Producer API 发布消息到1个或多个topic(主题)中。
- 应用程序使用 Consumer API 来订阅一个或多个topic,并处理产生的消息。
- 应用程序使用 Streams API 充当一个流处理器,从1个或多个topic消费输入流,并生产一个输出流到1个或多个输出topic,有效地将输入流转换到输出流。
-
Connector API 可构建或运行可重用的生产者或消费者,将topic连接到现有的应用程序或数据系统。例如,连接到关系数据库的连接器可以捕获表的每个变更。
3.Kafka的特点
分布式:多分区,多副本,多订阅者,基于Zookeeper调度
高性能:高吞吐量,低延迟,高并发,时间复杂度为O(1)
持久性与扩展性:数据可持久化,容错性,支持在线水平扩展,消息自动平衡
4.Kafka应用场景
可以用于消息队列,行为跟踪,元信息监控,日志收集,流处理,事件源,持久性日志(commit log)。
5.Kafka消息事务
为什么要支持事务?
满足“读取-处理-写入”模式
流处理需求的不断增强
不准确的数据处理的容忍
数据传输的事务定义
最多一次:消息不会被重复发送,最多被传输一次,但也有可能一次不传输
最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输
精确的一次:不会漏传输也不会重复传输,每个消息都传输被一次而且仅仅被传输一次,这是大家所期望的。
事务保证-避免僵尸实例
(1)每个事务Producer分配一个transactional.id,在进程重新启动时能够识别相同的Producer实例
(2)Kafka增加了一个与transactional.id相关的epoch,存储每个transactional.id内部元数据
(3)一旦epoch被触发,任何具有相同的transactional.id和更旧的epoch的Producer被视为僵尸,Kafka会拒绝来自这些Procedure的后续事务性写入