在 Apache Kafka 中,消息的消费和传递是通过消费者(Consumer)与 Kafka 的分布式系统协作完成的。以下是消息传递的主要流程:
1. Producer 生产消息到 Kafka
- 消息写入:Producer 将消息发送到指定的主题(Topic)。每个主题会分成多个分区(Partition)。
- 分区分配:消息会根据某种分区策略(如轮询或基于 key 的哈希)写入特定的分区。
2. Consumer 消费消息
Kafka 中消费者的消息消费流程如下:
2.1 订阅主题
消费者通过 Kafka 客户端订阅一个或多个主题。它可以:
- 直接订阅特定主题。
- 使用正则表达式动态订阅匹配的主题。
2.2 消费者组 (Consumer Group)
- 消费者组的概念:消费者可以加入一个消费者组,消费者组中的每个消费者负责消费部分分区的数据。
- 分区分配:
- 分区独占性:同一消费者组内的每个分区只能被一个消费者消费。
- 分配策略:Kafka 使用分区分配策略(如 Range、RoundRobin 或 StickyAssignor)将分区分配给组内消费者。
2.3 拉取消息
- Pull 模式:Kafka 的消费者是以拉取模式(Pull)从 Broker 读取消息。
- 偏移量控制:消费者从分区中读取消息的起始点由分区的偏移量(Offset)决定。
- 默认情况下,消费者会从上次提交的偏移量开始消费。
- 可以配置从最新或最早的消息开始消费。
2.4 消息处理
- 消息反序列化:消费者将从 Kafka 中拉取的字节数据反序列化为应用程序可以处理的对象。
- 业务逻辑:消费者应用程序根据业务需求处理这些消息。
2.5 提交偏移量
- 自动提交:消费者定期自动将当前处理的消息偏移量提交到 Kafka。
- 手动提交:应用程序可以选择手动提交偏移量以实现更精确的消费控制。
- 手动提交适用于需要严格处理确保消息不丢失或重复的场景。
3. Broker 与消费者的交互
消费者与 Kafka 集群中的 Broker 通过网络通信进行消息消费:
- 消费者协调器(Consumer Coordinator):每个 Broker 维护消费者组状态和分区分配信息。
- 组再平衡(Rebalance):当消费者组成员发生变化(新增、减少或故障)时,Kafka 会触发重新分区分配。
4. 消费模型
Kafka 的消费模式具有以下特点:
- 横向扩展:消费者组可以增加消费者以实现高吞吐量处理。
- 可靠性:消费者通过手动提交偏移量可确保消息不丢失。
- 灵活性:消费者可以随时重新消费历史数据(通过指定偏移量)。
这种设计使得 Kafka 消费者具备高吞吐量、可扩展性以及灵活性,适合处理分布式环境中的大规模实时流数据。
发布者:myrgd,转载请注明出处:https://www.object-c.cn/5146