写入方式
producer 采用 push 模式将消息发布到 broker,每条消息都被 append 到 patition 中,属于顺序写磁盘
顺序写磁盘效率比随机写内存要高,保障 kafka 吞吐
消息路由
producer 发送消息到 broker 时,会根据分区算法选择将其存储到哪一个 partition
路由机制
指定了 patition,则直接使用
patition 和 key 都未指定,使用轮询选出一个 patition
写入流程
. producer 先从 zookeeper 的 "/brokers/.../state" 节点找到该 partition 的 leader
producer 将消息发送给该 leader
leader 将消息写入本地 log
followers 从 leader pull 消息,写入本地 log 后 向leader 发送 ACK
leader 收到所有 ISR 中的 replica 的 ACK 后,增加 HW(high watermark,最后 commit 的 offset) 并向 producer 发送 ACK
HW与LEO详解
HW俗称高水位
一个partition对应的ISR中最小的LEO(log-end-offset)作为HW
consumer最多只能消费到HW所在的位置