Kafka保证消息不丢失
生产者发送消息到Broker丢失
设置异步发送
回调方法中的参数Exception e如果为空
代表发送成功,如果不为空代表发送失败出现异常
消息在Broker中丢失
kafka集群中存在分区机制
分区中分为leader和follower副本
leader负责读写,而follower只负责数据同步
broker确认机制
生产者向broker发送消息存在发送确认机制acks
acks=0,生产者不会等待broker响应
acks=1(默认),只要leader收到消息就会响应
acks=all,只有全部节点都收到消息,才会响应
消费者接受消息丢失
每一个分区只能由一个消费者进行消费,分区中根据偏移量记录消费的进度,按照偏移量进行消费
每个消费者会自动按时提交偏移量
如果在提交之前宕机,就有可能出现重复消费
如果在消费之前提交然后宕机,就有可能出现丢失数据的情况
解决方案
禁用自动提交偏移量,改为手动提交
可以使用同步提交,异步提交或者同步+异步的方式组合提交