Skip to content

Kafka 高性能流处理平台指南 ​

Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,现已成为大数据和实时流计算领域的事实标准。

1. Kafka 是什么? ​

Kafka 具有三个核心功能:

  1. 消息队列:发布和订阅消息流。
  2. 容错存储:将消息持久化到磁盘,支持多副本。
  3. 流式处理:在消息发布时进行实时转换或处理。

2. 核心概念 ​

  • Producer: 产生消息的一方。
  • Consumer: 消费消息的一方。
  • Broker: Kafka 实例。多个 Broker 组成集群。
  • Topic: 消息的逻辑主题。
  • Partition (分区): Topic 的物理拆分,分布在不同 Broker 上以支持并发。Kafka 保证 Partition 内有序。
  • Replica (副本): 提高容灾能力。分为 Leader 和 Follower。

3. Zookeeper 的作用 ​

Zookeeper 主要为 Kafka 提供元数据管理:

  • Broker 注册:维护服务器列表。
  • Topic 注册:管理分区信息及与 Broker 的对应关系。
  • 负载均衡:在 Partition 变动或 Consumer 变动时重新分配任务。
  • 选举:辅助进行 Partition Leader 的选举。

4. 可靠性保证:如何保证消息不丢失 ​

4.1 生产者端 ​

  • 使用带回调的 send 方法:不要默认发送成功,通过回调处理失败并重试。
  • 配置 retries:设置合理的重试次数和重试间隔。
  • 设置 acks = all:要求所有副本都接收到消息才算成功。

4.2 Broker 端 ​

  • replication.factor >= 3:保证每个分区至少有 3 个副本。
  • min.insync.replicas > 1:至少写入 2 个副本才算成功。
  • unclean.leader.election.enable = false:禁止非同步程度达标的副本被选为 Leader。

4.3 消费者端 ​

  • 手动提交 Offset:关闭自动提交,在业务逻辑真正执行完后再手动提交。
  • 注意:这可能导致重复消费,需在消费端实现幂等。

5. 顺序消费的实现 ​

Kafka 仅保证 Partition 内的顺序。

  • 方案 1:一个 Topic 只设一个 Partition(牺牲性能)。
  • 方案 2 (推荐):发送消息时指定 Key。Kafka 会将相同 Key 的消息发往同一个 Partition,从而保证顺序。

6. Kafka 与其他 MQ 的优势 ​

  • 极致性能:批量处理、异步 IO、零拷贝(Zero-Copy)技术。
  • 生态兼容性:在大数据(Spark, Flink, Hadoop)领域兼容性无可匹敌。
  • 超高吞吐量:适合每秒处理千万级消息的日志采集和流式计算场景。

7. 参考资料 ​

  • Kafka 官方文档
  • [Kafka 核心技术与实战 - 极客时间]
  • [Kafka 常见面试题总结 - JavaGuide]

方舟 · Ark