一、kafka相关名词
1、kafka架构
2、相关名词解释
1.producer: 消息生产者,发布消息到 kafka 集群的终端或服务。 2.broker: kafka 集群中包含的服务器。 3.topic: 每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。 4.partition: partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。 5.consumer: 从 kafka 集群中消费消息的终端或服务。 6.Consumer group: high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。 7.replica: partition 的副本,保障 partition 的高可用。 8.leader: replica 中的一个角色, producer 和 consumer 只跟 leader 交互。 9.follower: replica 中的一个角色,从 leader 中复制数据。 10.controller: kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。 12.zookeeper: kafka 通过 zookeeper 来存储集群的 meta 信息。
3、kafka zookeeper节点存储架构图
4、producer发布消息
- 写入方式:producer采用push模式将消息发送到broker(kafka集群中的服务器),每条消息都被append到partition中,属于顺序写磁盘
- 消息路由:生产者发送消息时,会根据分区算法选择将其存储到哪一个partition中,其路由机制为:
- 指定partition则直接使用
- 未指定partition但指定key,通过key和value进行hash,选出一个partition
- partition和key均未指定,使用轮询选出一个partition
5、写入流程
1. producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该 partition 的 leader 2. producer 将消息发送给该 leader 3. leader 将消息写入本地 log 4. followers 从 leader pull 消息,写入本地 log 后 leader 发送 ACK 5. leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK
6、数据发送保证机制
- At most once 消息可能会丢,但绝对不会重复传输
- At least one 消息绝不会丢,但可能会重复传输
- Exactly once 每条消息肯定会被传输一次且仅传输一次
7、broker保存消息
- 将topic分成多个partition存储,无论消息是否被消费,kafka都会保留所有消息,有两种策略可以删除旧数据,基于时间:log.retention.hours,基于大小:log.retention.bytes
8、kafka HA
- 同一个partition可能会有多个replica,没有replica的情况下,一旦broker宕机,其上所有的partition数据都不可被消费,同时生产者producer 也不能再将数据存于其上的 patition。引入replication 之后,同一个 partition 可能会有多个 replica,而这时需要在这些 replica 之间选出一个 leader,producer 和 consumer 只与这个 leader 交互,其它 replica 作为 follower 从 leader 中复制数据。
- Kafka 分配 Replica 的算法如下:
- 将所有 broker(假设共 n 个 broker)和待分配的 partition 排序
- 将第 i 个 partition 分配到第(i mod n)个 broker 上
- 将第 i 个 partition 的第 j 个 replica 分配到第((i + j) mode n)个 broker上