Kafka 高吞吐、消息丢失场景、副本维护、Leader 选举以及消息幂等性保证

65 阅读2分钟

Kafka 高吞吐原因:

  1. 分区机制: Kafka 的分区机制使得多个消费者可以并行消费,提高了整体的吞吐量。
  2. 水平扩展: Kafka 支持水平扩展,可以通过增加分区数、增加副本数、增加Broker等方式来提高整体吞吐量。
  3. 零拷贝技术: Kafka 使用零拷贝技术,减少了数据在内存之间的拷贝次数,提高了数据传输的效率。
  4. Batch 发送: 生产者可以批量发送消息,减少网络开销,提高了吞吐量。
  5. 异步 IO: Kafka 使用异步 IO 操作,当生产者发送消息时,不会等待服务器的响应,从而提高了生产者的吞吐量。
  6. 压缩技术: Kafka 支持消息的压缩,可以减小消息的体积,提高了网络传输的效率。

Kafka 丢失消息的场景:

  1. Replication Factor 设置不合理: 如果 Replication Factor 设置为 1,当某个 Broker 宕机时,可能导致消息丢失。建议设置合理的 Replication Factor。
  2. 生产者发送失败: 如果生产者发送消息失败,可能导致消息丢失。可以通过配置生产者的 acks 参数来确保消息发送的可靠性。
  3. 消息过期: 如果消息的 retention.ms 参数设置得太短,可能导致消息在存储时过期被删除,造成消息丢失。

Kafka 副本维护:

  1. ISR(In-Sync Replicas): ISR 是一组与 Leader 处于同步状态的副本,它们接收到了 Leader 的消息。Kafka 使用 ISR 机制来确保消息的可靠性。
  2. Replica Lag: 如果某个副本的同步进度落后于 ISR 中的其他副本,就会被踢出 ISR,不再参与消息的同步。

Kafka Leader 选举:

  1. 选举条件: 当 Leader 副本宕机或失去联系时,剩余的 ISR 中的副本会开始进行 Leader 选举。
  2. 选举原理: 剩余的 ISR 中副本会进行投票,选取第一个收到超过半数投票的副本作为新的 Leader。
  3. Leader 选举算法: Kafka 使用了一种基于 ZooKeeper 的 Leader 选举算法,确保选出的 Leader 是 ISR 中的一员。

Kafka 消息幂等性保证:

  1. Producer Id: 生产者在发送消息时,会携带一个唯一的 Producer Id,Kafka 利用 Producer Id 来保证消息的幂等性。
  2. Sequence Number: 每个消息都有一个唯一的 Sequence Number,Kafka 使用这个序列号来确保消息的顺序性。
  3. 幂等性写入: 如果生产者收到了消息发送的确认,但是网络异常导致 Broker 没有收到确认,生产者可以重试发送相同的消息,而不会产生重复消息。
  4. Exactly Once 语义: Kafka 提供了 Exactly Once 语义,通过生产者的幂等性和消费者的事务性来保证消息的精确一次传递。