生产者
生产流程 32页


生产者创建
Kafka生产者需要三个必须参数:broker地址清单,key和value的序列化方式 (如StringSerializer)生产者发送

ACKS
acks 参数代表多少副本分区副本收到消息才算写入成功
0 生产者发送即不管服务器响应
1 只等待主节点响应
all 等待所有节点响应数据有序写入,有序读取
如果消息不含key,则默认轮询使用分区。
如果消息包含key,则默认hash散列。得注意大key问题,可以自定义重分区
消费者
0.10.1 旧版本内。kafka 心跳监测节点存活和 消息轮询频率监测 (处理消息花费时间) 是相互独立的
session.timeout.ms 默认3s

由消费组的群主来分配消费者分区
创建消费者
必须的三个创建参数和生产者一致,也可以创建group.id的消费者群偏移量提交
1 自动提交,提交间隔默认5s。rebalance会重复提交
2 同步/异步手动提交
3 同步异步组合提交。平时异步,在finally最后一次用同步提交
如果不能容忍任何数据重复问题。可以把offset和保存记录同时存在db中。出现异常可以一起回滚。然后每次读取db的offset异步手动提交的重复消费


控制器
功能:通过zk选取控制器,控制器来选取首领副本
控制分区主从节点的控制器本身也是一个broker

副本和请求

客户端如何知道从哪个副本发送消费生产请求?
1 每个broker都会保存元信息,服务器可以告诉客户端topic的分区,首领副本等信息。
2 客户端和任意broker发送元信息请求获得信息,再和首领副本交互。
3 定时刷新元信息,防止变动生产请求

生产的数据会写入本地文件系统的缓存中,ack的判定也只是知道写入了缓存中。不保证何时写入磁盘。
Kafka依赖复制功能保证数据的持久性
获取请求
首领副本处理和零拷贝响应
响应判定:积累一定数据量响应,达到一定时间响应

只能读取已写入所有同步副本的信息

其他请求
Kafka内部通讯基于TCP的二进制协议,协议内增加请求类型
例如offset由原先zk存储变更为特定kafka主题上保存。在协议内增加offset请求类型
存储
分区设定

分区数据的删除:根据设定时间参数删除,默认7天 / 根据分区大小参数删除,默认1G额外清理模式
可以开启清理模式,根据脏数据比例自动清理


文件格式

通过索引立刻读取指定分区的offset数据
可靠的数据传递
原子,一致,隔离,持久
Kafka 数据传递的保证点

复制判定为是同步的跟随着副本条件

后续还需要大量补充
















