kafka保证消息有序

Posted stivenyang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kafka保证消息有序相关的知识,希望对你有一定的参考价值。

kafka是可以保证同一个分区里面的消息写入是有序的。也就是说,如果生产者按照一定的顺序发送消息,broker就会按照这个消息顺序来将他们写入分区,消费者也会按照一定的顺序将他们写入分区,消费者也会按照同样的顺序读取它们。

在某些情况下,数据的顺序是很重要的,例如,在一个账户存入100元再取出来 和 先从一个账户取100元之后再存进去是截然不同的。

让消息无序

kafka有个max.in.flight.requests.per.connection参数,这个参数是用来调整每个分区的可写入的连接数。如果把retries参数设置为一个非零整数,同时把max.in.flight.requests.per.connection设置为一个大于1的整数,那么,如果第一个批次消息写入失败,而第二个批次写入成功,broker会重试写入第一个批次。如果此时第一个批次也写入成功,那么两个批次的顺序就反过来了。

让消息有序

一般来说,如果某些场景要求消息是有序的,那么消息是否写入成功也是很关键的,所以不建议把retries参数设置为0。可以把max.in.flight.requests.per.connection设置为1,这样在生产者尝试将第一批消息发送到分区上时,就不会有其他的消息发送给broker了。不过这样会严重影响生产的吞吐量,所以只有在对消息的顺序有严格的要求的情况下才能这么做。

以上是关于kafka保证消息有序的主要内容,如果未能解决你的问题,请参考以下文章

kafka概念入门[一]

利用Flink消费Kafka数据保证全局有序

利用Flink消费Kafka数据保证全局有序

kafka如何保证顺序性

面试题百日百刷-kafka篇

Kafka-语义&重复消费&丢失数据&分区有序