Kafka 核心概念
Kafka 是一个分布式流处理平台,核心概念包括生产者(Producer)、消费者(Consumer)、主题(Topic)、分区(Partition)和 Broker。生产者将消息发布到主题,消费者从主题订阅消息。分区是主题的物理分片,每个分区是一个有序、不可变的消息队列。Broker 是 Kafka 集群中的服务器节点。
分区与副本机制
分区通过水平扩展提高吞吐量,每个分区可以分配到不同的 Broker。副本机制保证数据高可用,每个分区有一个 Leader 副本和多个 Follower 副本。Leader 处理读写请求,Follower 同步 Leader 数据。ISR(In-Sync Replicas)是保持同步的副本集合,只有 ISR 中的副本有资格成为 Leader。
消息存储与清理
Kafka 使用顺序 I/O 和日志分段存储消息,每个分段对应一个文件。消息通过偏移量(Offset)定位,消费者可以重置偏移量重新消费。日志清理策略分为删除(Delete)和压缩(Compact),删除策略基于时间或大小,压缩策略保留每个键的最新值。
生产者与消费者
生产者通过异步或同步方式发送消息,支持消息确认机制(acks=0/1/all)。消费者通过消费者组(Consumer Group)实现负载均衡,每个分区只能被组内一个消费者消费。消费者提交偏移量到 Kafka 或外部存储(如数据库)。
消息的可靠性保证
生产者:确认机制、持久化机制、失败重试、死信队列
消费者:确认机制、持久化机制、失败重试
broke:持久化、幂等性、副本机制、确认机制、事务消息
高可用与性能优化
Kafka 通过多副本和 Leader 选举实现高可用,Zookeeper 用于协调选举和存储元数据。性能优化包括调整批处理大小、压缩算法、分区数量和副本分布。监控指标包括延迟、吞吐量和 ISR 状态。
常见问题与解决方案
消息重复消费问题可以通过幂等生产者或消费者去重解决。消息顺序性通过单分区或业务逻辑保证。数据丢失问题通过合理设置 acks 和副本数量避免。Kafka 集群扩容需要重新分配分区,避免热点问题。
Kafka 与其他技术对比
Kafka 与 RabbitMQ 对比,Kafka 适合高吞吐量场景,RabbitMQ 适合复杂路由和低延迟场景。Kafka 与 RocketMQ 对比,RocketMQ 支持事务消息和延迟消息,Kafka 生态更丰富。Kafka Streams 和 Flink 对比,Flink 提供更复杂的流处理能力。
实际应用场景
Kafka 常用于日志收集、实时数据处理、事件溯源和消息队列。案例包括电商订单流水、用户行为分析和系统监控。设计 Kafka 系统时需要考虑消息大小、吞吐量、延迟和容错需求。