全站最帅😎
发布于 2022-05-18 / 1009 阅读
0
0

Kafka顺序消息要点

保证kafka顺序消息,很多人仅仅只知道将分区数置为1,这样做是有风险的。因为对于单个生产者发送消息是并行的,虽然也是有顺序控制,但是如果前面的消息发送失败,后面的消息发送成功,那么顺序一样也会错乱。

先来看看以下配置会出现什么样的情况:如果把 retires 设为非零整数,同时把 max.in.flight.requests.per.connection 设为比 1 大的数,当第一个批次消息写入失败,而第二个批次写入成功, broker会重试写入第一个批次。如果此时第一个批次也写入成功,那么消息的顺序可能产生如下的错乱。

2 -> 3 -> 4 -> 1

顺序消息保证消息被成功写入也是很关键的,所以不建议把 retires = 0 (不重试的话消息可能会因为连接关闭等原因丢失) 。
同时设置 max.in.flight.request.per.connection = 1 。这样在生产者尝试发送第一批消息时,就不会有其他的消息发送给 broker 。以上配置会严重影响生产者的吞吐量,所以只有在对消息的顺序有严格要求的情况下才能这么做

要点如下:

  1. 保证当前Topic下只有一个Partition
  2. 生产者retires不为0,且 max.in.flight.requests.per.connection = 1

评论