文章目录
- 数据在Kafka中的流转
- 阶段一:生产者如何保证数据不丢失
- ACK机制
- 阶段二:Broker端如何保证数据不丢失
- 磁盘+副本
- 阶段三:消费者如何保证数据不丢失
- 消费者提交偏移量
数据在Kafka中的流转
阶段一:生产者如何保证数据不丢失
ACK机制
生产者将数据生产到Broker后,Broker需要给一个ACK确认响应,在Kafka中,提供了3种ack方案:
- ack=0: 生产者只负责发送消息,不接收不关心Broker的响应
- ack=1: 生产者发送数据到Broker端后,需要等待对应的Topic上的主副本响应
- ack=-1: 生产者发送数据到Broker端后,需要等待对应的Topic上的全部副本响应
阶段二:Broker端如何保证数据不丢失
磁盘+副本
- 磁盘存储
- 副本机制
- ack=-1
阶段三:消费者如何保证数据不丢失
消费者提交偏移量
- 消费者启动后连接到kafka根据group.id寻找上一次数据的消费位置
- 如果找到了,则从上次的位置开始消费,如果没找到,则从当前位置开始消费
- 消费者消费完数据后,向kafka提交消费数据的偏移量,记录在zookeeper/kafka集群
- 手动
- 自动: 可能存在重复消费的问题