你可以使用多线程消费时,采用内存队列,一条线程对应一个内存队列,将相同key的消息发往同一个内存队列中,这样可以确保多线程顺序消费了
但其实kafka无法保证严格的消费顺序,具体原因可以看下我写的一篇博客分析:
https://mp.weixin.qq.com/s/BaRAbk5Zeg9VhCQlhg6ACA
1、记一次 Kafka 重启失败问题排查
https://mp.weixin.qq.com/s/ee7_mhxnj05DxK3EJihyfQ
2、从源码和日志文件结构中分析 Kafka 重启失败事件
https://mp.weixin.qq.com/s/zbwGLygjvO_ncgp7FH9QMA
3、当 Kafka 分区不可用且 leader 副本被损坏时,如何尽量减少数据的丢失?
https://mp.weixin.qq.com/s/b1etPGC97xNjmgdQbycnSg
针对本次事件,我用 3 篇博客详细描述了前因后果,并给出了最后的终极解决方案。
从源码和日志文件结构中分析 Kafka 重启失败事件:
https://mp.weixin.qq.com/s/zbwGLygjvO_ncgp7FH9QMA
呕心沥血的一次分析,在过程中涉及了Kafka 构建索引文件的细节以及日志文件结构的分析。
遗憾的是找到这个应该说是Kafka的bug之后,发现官方并没有解决方案,只能删除错误日志文件,这太暴力了[流泪],还是赶紧升级Kafka版本吧!
从源码和日志文件结构中分析 Kafka 重启失败事件:
https://mp.weixin.qq.com/s/zbwGLygjvO_ncgp7FH9QMA
呕心沥血的一次分析,在过程中涉及了Kafka 构建索引文件的细节以及日志文件结构的分析。
遗憾的是找到这个应该说是Kafka的bug之后,发现官方并没有解决方案,只能删除错误日志文件,这太暴力了[流泪],还是赶紧升级Kafka版本吧!
这个问题应该是0.11版本中的bug,我贴两个issue出来,一起参阅一下:
https://issues.apache.org/jira/browse/KAFKA-3955
https://issues.apache.org/jira/browse/KAFKA-4972
后面我总结出应对方案后也发出来给大家
也就是说,如果该客户端监听了3个分区,就有三个长连接?
这有两种情况:
1.如果这3个分区都在不同broker,那三个长连接肯定需要
2.如果3个分区都在同一个broker,是否只需要一个长连接就可以了?