Kafka幂等生产者能保证在多个分区中只有一次吗

sirbozc5  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(415)

我只是一个Kafka的新手,对Kafka的幂等性有了一点了解。
据我所知,当生产者向代理发送消息时,代理需要向生产者发回一个ack,告诉生产者消息已经收到。如果由于某种原因,生产者没有接收到ack,生产者必须再次向代理发送相同的消息,以便复制该消息。幂等生产者可以消除这个问题。
基本上,每个生产者将被分配一个pid,每条消息将被分配一个序列号。所以pid+序列号可以识别一条消息。这就是Kafka的理想力量的运作方式。
如果我是对的,那么假设我为一个主题创建了三个分区,生产者使用循环算法向这三个分区发送消息,这意味着这三个分区将逐个接收消息。在这种情况下,Kafka还能保证幂等性吗?
例如,有三个分区a、b和c。
在某个时刻,生产者正在将消息x发送到分区a,a成功地接收到x,但是在发送回ack时失败。因此,生产者重新发送消息x。现在我有两个问题:
它将是分区a或分区b,它将接收最新的消息x?
如果是分区b,是否意味着分区a和分区b将有相同的消息x,这意味着在这种情况下kafka不能确保幂等性?

5f0d552i

5f0d552i1#

在某个时刻,生产者正在将消息x发送到分区a,a成功地接收到x,但是在发送回ack时失败。因此,生产者重新发送消息x。
它将是分区a或分区b,它将接收最新的消息x?
重新发送是在内部完成的,我们不在应用程序代码中完成。所以,当一个信息 X 发送到分区 A 没有收到确认,它将被重新发送到同一分区。如果我们手动重新发送应用程序代码,那么是的,将有重复。
如果分区逻辑是循环的,则下一条消息将被发送到下一个分区。分区逻辑不适用于重新发送,也就是说,如果消息发送失败,它将重新发送到同一分区。
如果是分区b,是否意味着分区a和分区b将有相同的消息x,这意味着在这种情况下kafka不能确保幂等性?
这不适用,因为重发总是发送到同一个分区。分区逻辑在发送消息之前只执行一次,而不是每次重试。

相关问题