kafka是如何处理数据乱序问题的?
1.数据有序
生产者发送的数据,单分区内可以做到有序,多分区无法保证,除非把多个分区的数据拉取到消费端,进行排序,但是这样做效率很低,不如直接设置一个分区
2.数据乱序
1)kafka在1.x版本之前保证数据单分区有序,条件如下:
max.in.flight.requests.per.connection=1(不需要考虑是否开启幂等性)
2)kafka在1.x及以后版本保证数据单分区有序,条件如下:
1.开启幂等性
max.in.flight.requests.per.connection需要设置小于等于5。
2.未开启幂等性
max.in.flight.requests.per.connection需要设置为1。
原因:因为在kafka1.x之后,启用幂等性后,kafka服务端会缓存producer发来的最近5个request的元数据,所以无论如何都会保证最近5个request的数据是有序的。
出现乱序的原因:
出现乱序的原因:
1)生产者在发送3请求的时候,发生异常,发生异常需要重新发送,所以排在了后面,在进行落盘的时候,先落盘1,2 ,落盘3的时候发现是4,需要等,等到3出现为止,然后将 3,4 ,5排序,排序后再进行落盘。
顺序错乱了,会自动排序(开启幂等性)。