外观
Kafka 消费者组和生产者是什么?
Kafka
生产者:是向 Kafka
集群中的主题(Topic
)发送消息的客户端程序。生产者负责创建消息,并将这些消息发布到 Kafka 集群中指定的主题里。
工作流程
- 消息创建:生产者应用程序根据业务逻辑生成消息内容,消息通常包含键(
Key
)和值(Value
),键可用于消息分区等用途,值则是实际要发送的数据。 - 序列化:生产者将创建好的消息对象序列化为字节数组,因为
Kafka
是基于字节流传输消息的。常见的序列化方式有JSON
、Avro
、Protobuf
等。 - 分区选择:如果生产者指定了消息的键,
Kafka
会根据键的哈希值将消息路由到特定的分区;若未指定键,则按照轮询等策略将消息均匀分配到各个分区。分区选择的目的是为了实现负载均衡和数据的合理分布。 - 发送消息:序列化后的消息被发送到
Kafka
集群中对应的主题分区。生产者可以选择同步或异步的方式发送消息。同步发送会等待服务器的响应,而异步发送则在发送后继续执行后续操作,通过回调函数处理服务器响应。
应用场景
- 日志收集:将各个服务产生的日志信息作为消息发送到
Kafka
主题,方便后续的日志分析和存储。 - 数据采集:收集传感器、物联网设备等产生的数据,为数据分析和决策提供支持。
Kafka
消费者组:Kafka
消费者组是一组消费者实例的集合,这些消费者共同消费一个或多个主题的消息。消费者组是 Kafka
实现消息并行消费和负载均衡的核心机制。
工作原理
- 分区分配:当消费者组中的消费者实例启动时,
Kafka
会根据一定的分区分配策略(如Range
分区、RoundRobin
分区等)将主题的各个分区分配给消费者组内的消费者。每个分区只能被消费者组内的一个消费者实例消费,这样可以避免消息的重复消费。 - 消息消费:消费者从分配到的分区中拉取消息进行消费。消费者会定期向
Kafka
集群提交消费偏移量(Offset
),记录自己已经消费到的位置。 - 故障恢复与重平衡:如果消费者组中的某个消费者实例出现故障或退出,或者有新的消费者实例加入,
Kafka
会触发重平衡操作,重新分配分区给剩余的消费者实例,确保分区的分配始终处于最优状态。
应用场景
- 数据处理与分析:多个消费者实例组成消费者组并行消费
Kafka
主题中的数据,进行实时数据分析、ETL
等操作,提高处理效率。 - 系统解耦与异步通信:不同的业务系统可以作为消费者组的成员,从
Kafka
主题中获取所需的数据,实现系统之间的解耦和异步通信。