kafka的消息确认级别有哪些?
1 个回答
为了击碎你伪装的表面,我只能用尽全身力气挥出那惊鸿的半月弧光。韩湘子Kafka 的消息确认机制(acknowledgment level)决定了生产者在发送消息后,Kafka 如何确认消息是否成功接收。Kafka 提供了三种消息确认级别,用于控制消息发送的可靠性和性能: ### 1. **acks = 0** (无确认) - **描述**:生产者发送消息后不会等待 Kafka 确认是否成功接收。消息直接从生产者发送到 Kafka 中的一个分区,生产者不会等待任何响应。 - **特点**: - **性能高**:因为没有等待确认,消息发送速度最快。 - **可靠性差**:消息丢失的风险最高,因为如果 Kafka 发生故障,生产者无法知道消息是否被成功接收。 - **适用场景**:适用于对性能要求较高,但对消息丢失不敏感的场景。 ### 2. **acks = 1** (至少一个副本确认) - **描述**:生产者发送消息后,Kafka 会等待 **leader 副本** 接收到消息并写入日志后再返回确认。只要 leader 接收到并写入日志,就会确认消息成功。 - **特点**: - **性能适中**:相对于 `acks = 0`,有了一定的可靠性保障。 - **可靠性较好**:如果 leader 宕机,消息可能会丢失(因为没有等待 follower 副本同步数据)。但如果没有发生 leader 宕机,消息会被成功接收。 - **适用场景**:适用于大部分对可靠性要求适中的应用,既保证了可靠性,又有一定的性能优化。 ### 3. **acks = all (acks = -1)** (所有副本确认) - **描述**:生产者发送消息后,会等待 **所有同步副本**(包括 leader 和 follower)都接收到并写入消息后,才返回确认。这样就保证了消息被所有同步副本接收。 - **特点**: - **性能低**:因为需要等待所有副本都确认,性能较差。 - **可靠性高**:提供最强的消息持久性保障,确保消息不会丢失,即使 leader 宕机也可以从 follower 中恢复。 - **适用场景**:适用于对可靠性要求非常高的应用,比如金融、日志、计费等关键性业务场景。 ### 总结 - **acks = 0**:性能最快,可靠性最差,适用于对丢失消息容忍的场景。 - **acks = 1**:性能和可靠性平衡,适用于大多数场景。 - **acks = all**(或 `acks = -1`):最可靠,性能最差,适用于对可靠性要求极高的场景。发布于 2025-02-16 18:32 •IP属地 吉林举报评论收藏
公众号进入网站体验更佳

