这是我对异步向Kafka发送消息并实现回调函数的理解:
场景:Producer将接收4批要发送的消息(为了简单起见,发送到同一分区(。
生产商发送批次A.
生产商发送批次B.
生产者收到经纪人的回复并执行回调——批次A不成功且可重试,批次B成功,因此生产者再次发送批次A。
这不会干扰消息排序吗?因为现在卡夫卡在B之后收到了A?
如果您需要在分区内进行消息排序,您可以使用幂等生产者:
enable.idempotence=true
akcs=all
max.in.flight.requests.per.connection<=5
retries>0
这将解决生产商的潜在重复,并维持订单。
如果您不想使用幂等生产者,那么设置max.in.flight.requests.per.connection=1
就足够了。这是生产商端未确认的批次数。这意味着在收到对A的确认之前不会发送批次B。