Appearance
Kafka 高性能流处理平台指南
Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,现已成为大数据和实时流计算领域的事实标准。
1. Kafka 是什么?
Kafka 具有三个核心功能:
- 消息队列:发布和订阅消息流。
- 容错存储:将消息持久化到磁盘,支持多副本。
- 流式处理:在消息发布时进行实时转换或处理。
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]
