kafka顺序保证

kafka顺序保证

理想情况:

Kafka 可以保证同 一个分区里的消息是有序的。

也就是说,如果生产者按照一定的顺序发送消息, broker 就会按照这个顺序把它们写入分区,消费者也按照同样的顺序读取它们。

实际情况:

在某些情况下 顺序是非常重要的,有些场景对顺序不是很敏感。

如果把retries设为非零整数,同时把 max.in.flight.requests.per.connection 设为比 1大的数,那么,如果第 一个批次消息写入失败,而第 二个批次写入 成功, broker 会重试写入第 一个批次。如果此时第 一个批次也写入成功,那 么两个批次的顺序就反过来了。

使用建议

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

PS:

max.in.flight.requests.per.connection = 1 限制客户端在单个连接上能够发送的未响应请求的个数。设置此值是1表示kafka broker在响应请求之前client不能再向同一个broker发送请求。

你可能感兴趣的:(kafka顺序保证)