知识点
使用kafka在消息的收发过程都是会出现消息丢失,Kafka分别给出了解决方案:
- 生产者发送消息到Broker丢失
- 消息在broker中存储丢失
- 消费者从Broker接收消息丢失
生产者发送消息到Broker丢失
kafka生产者发送消息有多种消息发送方式(同步、异步),同步会产生阻塞,我们一般会使用异步发送
一般来说,消息发送失败的原因中:因为网络抖动发送失败比较多。我们可以设置消息重试
消息在broker中存储丢失
消息存储的大体流程:当生产者发送消息到Broker中后,这些消息会存储到分区中,分区分为leader和follower两个角色;leader有一个,而follower有多个,收到消息后,首先将数据保存到leader分区中,由leader同步到其他follower。这个acks确认机制就是同步机制。
- 发送确认机制acks
消费者从Broker接收消息丢失
- kafka中的分区机制指的是将每个主题划分成多个分区
- topic分区中的消息只能由消费者组中唯一一个消费者处理,不同的分区分配给不同的消费者(同一个消费者组)
分区消息的offset
消费者默认是自动按期提交已经消费的偏移量,默认是每隔5秒提交一次。
如果出现重平衡的情况,可能会重复消费或者丢失数据
分析出现问题的原因:消费者是自动提交偏移,导致提交的偏移量不准确
禁用自动提交偏移量,改为手动
- 同步提交
- 异步提交
- 同步+异步组合提交
同步+异步组合提交代码块
Kafka中消息重复消费问题如何解决的
- 关闭自动提交偏移量,开启手动提交偏移量
- 提交方式,最好是同步+异步提交
- 幂等方案