背景
- 同一个kafka有两个topic,分别为topic1,topic2
- topic1先于topic2生产数据(结果均成功)
- 消费时设置两个consumer分别订阅topic1和topic2
- 消息关系:topic1生产消息A,topic2生产消息A1,A2,A3...
功能:先消费topic1的消息A再消费topic2的消息A1、A2等
问题
少数随机出现先消费topic2中的消息(A1/A2等)再消费到topic1中的消息A
日志
异常节点消费日志
2019-08-23 03:57:03,803 - log.48 - INFO - [1048980] 新增本地汇总信息:消息2
2019-08-23 03:57:03,805 - log.48 - INFO - 消费详情(4):消息1.1
2019-08-23 03:57:05,712 - log.48 - INFO - [1048978] 新增本地汇总信息:消息1
正常节点消费日志
2019-08-23 03:57:02,469 - log.48 - INFO - [1048978] 新增本地汇总信息:消息1
2019-08-23 03:57:02,825 - log.48 - INFO - 消费详情(1):消息1.1
原因
-
topic1和topic2消费独立,即对于不同节点消费互不关联
-
同一个应用节点、消费组group_id针对某个topic消息是无序且单条消息消费,即对于topic1消费不一定是先生产先消费,比如topic1生产消息1和消息2,是可能会出现先消费到消息2再消费到消息1的情况,而且是先消费完消息2后再消费消息1,不会出现同时消费到消息1和消息2的情况。(只有对于相同消费组grouop_id且同一partition下消费消息才是有序的)
拓展
-
为什么topic2消费隔那么久才消费topic1? 因为超时处理耗时,在消费topic2时处理完毕后消费到了topic1数据
-
为什么同样是topic1的数据后面生产的数据A消费到了,前面生产的数据B还没到 消息 A 推到partition1 消息2 推到partition 2 在消费的时候 partition 1,2 是没有顺序的 (auto_offset_reset 针对分区而言的)