这是我对Kafka异步发送消息和实现回调函数的理解:
方案:生成器将接收4批要发送的消息(为简单起见,发送到同一分区)。
生产商发送批次A。生成器发送批B。生成器接收来自代理的回复并实现回调-批次A不成功且可重试,批次B成功,因此生成器再次发送批次A。这不会打乱信息的顺序吗,因为Kafka现在收到的是A,而不是B?
pqwbnv8z1#
如果需要在分区内对消息进行排序,可以使用幂等生成器:
enable.idempotence=true akcs=all max.in.flight.requests.per.connection<=5 retries>0
这将解决来自生成器的潜在重复项,并保持顺序。如果你不想使用幂等生成器,那么设置max.in.flight.requests.per.connection=1就足够了。这是生成器端未确认的批数。这意味着在收到A的确认之前,批B不会被发送。
max.in.flight.requests.per.connection=1
1条答案
按热度按时间pqwbnv8z1#
如果需要在分区内对消息进行排序,可以使用幂等生成器:
这将解决来自生成器的潜在重复项,并保持顺序。
如果你不想使用幂等生成器,那么设置
max.in.flight.requests.per.connection=1
就足够了。这是生成器端未确认的批数。这意味着在收到A的确认之前,批B不会被发送。