1. 数据有序
单分区内有序(有条件)
多分区有序怎么办?将各分区数据放在一个数据池,进行统一排序,效率还不如单分区内有序。
- kafka在1.x版本之前保证数据单分区有序,条件如下: max.in.flight.requests.per.connection=1(不需要考虑是否开启幂等性)。
- kafka在1.x及以后版本保证数据单分区有序,条件如下:
- 开启幂等性 max.in.flight.requests.per.connection需要设置小于等于5。
- 未开启幂等性 max.in.flight.requests.per.connection需要设置为1。 原因说明:因为在kafka1.x以后,启用幂等后,kafka服务端会缓存producer发来的最近5个request的元数据,故无论如何,都可以保证最近5个request的数据都是有序的。
2. 乱序
- Kafka1.0x之前设置inflght = 1
- 新版本没有幂等性inflght = 1
- 新版本有幂等性 将数据进行缓存,单调递增可以放,断了缓存在内存中,直到数据到达,再排序。