【Kafka】Kafka 消息的消费模式

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: 【4月更文挑战第5天】【Kafka】Kafka 消息的消费模式

image.png

Kafka 消息的消费模式

在 Apache Kafka 中,消息的消费模式是指消费者如何从 Kafka 集群中拉取消息并进行处理的方式。Kafka 支持多种消费模式,包括简单消费者模式、消费者群组模式、消费者预取模式等。本文将深入探讨 Kafka 中的消息消费模式,包括消费模式的特点、使用场景、优缺点以及示例代码等方面。

1. 简单消费者模式

简单消费者模式是 Kafka 中最基本的消费模式,它由单个消费者实例从一个或多个分区中拉取消息并进行处理。简单消费者模式适用于单个消费者场景,消费者可以从指定的分区中拉取消息,并且消费者之间不存在协调和负载均衡的问题。

特点:

  • 单个消费者实例从一个或多个分区中拉取消息。
  • 消费者处理消息的速度由消费者自身控制,不存在协调和负载均衡的问题。
  • 消费者与分区一一对应,不支持水平扩展。

使用场景:

  • 需要独立控制消息消费速度的场景。
  • 消费者与分区一一对应的场景。

优缺点:

  • 优点:简单、易用,适用于单个消费者场景。
  • 缺点:不支持负载均衡和水平扩展,无法满足高并发和高吞吐量的需求。

示例代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("topic1"));

while (true) {
   
   
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
   
   
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
    }
}

2. 消费者群组模式

消费者群组模式是 Kafka 中常见的消费模式,它由多个消费者实例组成一个消费者群组(Consumer Group),每个消费者实例从一个或多个分区中拉取消息并进行处理。消费者群组模式适用于多个消费者场景,消费者群组可以实现负载均衡和水平扩展,提高系统的吞吐量和可扩展性。

特点:

  • 多个消费者实例组成一个消费者群组,每个消费者实例从一个或多个分区中拉取消息。
  • 消费者群组内的消费者实例之间通过协调器(Coordinator)进行协调和负载均衡。
  • 消费者群组支持水平扩展和负载均衡,可以实现高吞吐量和可扩展性。

使用场景:

  • 需要实现负载均衡和水平扩展的场景。
  • 多个消费者实例共同处理一个或多个分区的场景。

优缺点:

  • 优点:支持负载均衡和水平扩展,适用于多个消费者场景。
  • 缺点:复杂度较高,需要考虑消费者群组的协调和负载均衡问题。

示例代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("topic1"));

while (true) {
   
   
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
   
   
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
    }
}

3. 消费者预取模式

消费者预取模式是 Kafka 中高级的消费模式,它由多个消费者实例组成一个消费者群组,并且预先拉取一定数量的消息到本地缓存中,以提高消息的处理效率和响应速度。消费者预取模式适用于需要提高消息处理效率和响应速度的场景,但需要注意消费者预取模式可能导致消息重复消费或者消息丢失的问题。

特点:

  • 多个消费者实例组成一个消费者群组,每个消费者实例从一个或多个分区中拉取消息并进行处理。
  • 消费者预先拉取一定数量的消息到本地缓存中,并使用消息队列(Message Queue)来缓存消息。
  • 消费者预取模式可以提高消息处理效率和响应速度,但可能导致消息重复消费或者消息丢失的问题。

使用场景:

  • 需要提高消息处理效率和响应速度的场景。
  • 消费者预先拉取一定数量的消息到本地缓存中,并使用消息队列来缓存消息。

优缺点:

  • 优点:提高消息

处理效率和响应速度,减少网络传输和 IO 操作。

  • 缺点:可能导致消息重复消费或者消息丢失的问题,需要注意消息的幂等性和一致性。

示例代码:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test-group");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("topic1"));

while (true) {
   
   
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
   
   
        System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
    }
}

4. 总结

Kafka 中的消息消费模式包括简单消费者模式、消费者群组模式和消费者预取模式等多种形式,每种消费模式都有其特点、适用场景、优缺点和示例代码。了解和掌握 Kafka 中的消息消费模式对于构建高性能、可靠和可扩展的消息系统具有重要意义,可以根据业务需求和系统架构选择合适的消费模式,并结合实际情况进行优化和调整,以提高系统的吞吐量和可伸缩性。

相关文章
|
5月前
|
消息中间件 存储 Kafka
深入解析Kafka中的动态更新模式
深入解析Kafka中的动态更新模式
92 0
|
1月前
|
消息中间件 存储 监控
Kraft模式下Kafka脚本的使用
【9月更文挑战第9天】在Kraft模式下,使用Kafka脚本涉及以下几个关键步骤:启动Zookeeper和Kafka服务、创建主题、发送与消费消息、查看主题列表及描述主题详情。通过指定配置文件与相关参数,如`--replication-factor`和`--partitions`,可以灵活管理主题。此外,确保根据实际需求调整配置文件中的参数,并监控日志以维持最佳性能与及时问题处理。
|
2月前
|
消息中间件 负载均衡 Kafka
【Kafka消费秘籍】深入了解消费者组与独立模式,掌握消息消费的两种超能力!
【8月更文挑战第24天】Apache Kafka是一款高性能的分布式消息系统,支持灵活多样的消费模型以适应不同的应用场景。消息按主题组织,每个主题可划分为多个分区,确保消息顺序性。本文深入探讨了Kafka中的两大核心消费模式:消费者组(Consumer Group)和独立消费者(Standalone Consumer)。消费者组允许多个消费者协同工作,实现负载均衡及故障恢复,是最常用的消费模式。独立消费者模式则适用于需要高度定制化处理逻辑的场景,如消息重放等。通过对比这两种模式的特点和提供的示例代码,开发者可以根据具体需求选择最合适的消费策略,从而更好地利用Kafka构建高效的数据流应用程序。
50 3
|
4月前
|
消息中间件 负载均衡 监控
Kafka消费者:监听模式VS主动拉取,哪种更适合你?
Kafka消费者:监听模式VS主动拉取,哪种更适合你?
61 1
|
4月前
|
消息中间件 存储 Kafka
深入解析Kafka中的动态更新模式
深入解析Kafka中的动态更新模式
67 0
|
5月前
|
消息中间件 负载均衡 大数据
【夏之以寒-Kafka专栏 01】Kafka的消息是采用Pull模式还是Push模式?
Kafka采用Pull模式为主,消费者主动拉取消息,保证控制和灵活性;同时融合Push模式,如自动Partition再分配和有序消息传递,实现高可用和负载均衡。专栏提供全面资源和面试题,助力Kafka学习。
94 0
|
5月前
|
消息中间件 负载均衡 监控
Kafka消费者:监听模式VS主动拉取,哪种更适合你?
Kafka消费者:监听模式VS主动拉取,哪种更适合你?
271 0
|
5月前
|
消息中间件 存储 Kafka
Kafka - 消息队列的两种模式
Kafka - 消息队列的两种模式
171 0
|
消息中间件 缓存 容灾
Apache Kafka-通过设置Consumer Group实现广播模式
Apache Kafka-通过设置Consumer Group实现广播模式
1861 0
|
消息中间件 分布式计算 Java
「事件驱动架构」Kafka中的模式注册表和模式演化
「事件驱动架构」Kafka中的模式注册表和模式演化