在 Kafka 中,acks
参数用于配置生产者的消息确认模式。acks
参数可以设置为以下几个值之一:
-
acks=0
:生产者在消息发送出去之前不会等待任何确认,消息被认为已经发送成功。这是最低延迟的设置,但是可能会导致消息丢失。 -
acks=1
:生产者会等待 Leader 收到消息并发回确认。在这种设置下,消息至少被 Leader 收到,但是有可能在成功写入 Leader 之后、但在复制到 Followers 之前失败。 -
acks=all
或acks=-1
:生产者会等待 Leader 收到消息,并且所有 Followers 同步完成后才会收到确认。这是最安全的设置,可以确保消息不会丢失,但会增加延迟。
当acks
设置为all
或-1
时,Leader 在认为一条消息被 Commit(已成功写入并在所有 Followers 复制完成)时的情况是:
- Leader 成功写入消息: 消息首先被 Leader 成功写入到 Leader 所在的分区。
- Leader 向 Followers 复制消息: Leader 将消息复制到所有 ISR(In-Sync Replica)中的 Followers。ISR 是与 Leader 保持同步的副本集合。Leader 在等待 ISR 中的所有 Followers 同步完成。
- ISR 中的 Followers 同步完成: 当 ISR 中的所有 Followers 成功复制消息并确认完成后,Leader 认为消息已经被 Commit。
在这种情况下,只有当 ISR 中的所有 Followers 同步完成,Leader 才会认为消息被成功写入到所有的副本,从而进行 Commit。这样的设置可以确保消息不会因为某个 Followers 同步不及时而导致丢失,但会增加一定的延迟,因为需要等待所有的 Followers 完成同步。
Was this helpful?
0 / 0