博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人
Java知识图谱点击链接:体系化学习Java(Java面试专题)
感兴趣的同学可以收藏关注下 ,不然下次找不到哟
✊✊ 感觉对你有帮助的朋友,可以给博主一个三连,非常感谢
Kafka 消费者是使用 Apache Kafka 消息队列系统的应用程序,它们用于从 Kafka 主题(topics)中读取消息。消费者订阅一个或多个主题,并从这些主题中拉取消息以进行处理。消费者可以以不同的方式配置,例如,可以指定消息的偏移量(offset)以从特定位置开始消费消息,还可以指定消费者组(consumer group)以实现消息的分组消费。消费者是 Kafka 中的重要组成部分,用于实现可靠的消息传递和数据处理。
首先引入依赖
<dependency>
<groupId>org.apache.kafkagroupId>
<artifactId>kafka-clientsartifactId>
<version>2.8.0version>
dependency>
<dependency>
<groupId>org.springframework.kafkagroupId>
<artifactId>spring-kafkaartifactId>
<version>2.7.2version>
dependency>
以下代码创建一个简单的 Kafka 消费者:
package com.pany.camp.kafka;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
import java.time.Duration;
import java.util.Collections;
import java.util.Properties;
/**
*
* @description: Kafka 消费者
* @copyright: @Copyright (c) 2022
* @company: Aiocloud
* @author: pany
* @version: 1.0.0
* @createTime: 2023-06-26 18:04
*/
public class KafkaConsumerExample {
private static final String TOPIC_NAME = "test-topic";
private static final String BOOTSTRAP_SERVERS = "localhost:9092";
private static final String GROUP_ID = "test-group";
public static void main(String[] args) {
Properties props = new Properties();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, BOOTSTRAP_SERVERS);
props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUP_ID);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName());
Consumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList(TOPIC_NAME));
while (true) {
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
records.forEach(record -> {
System.out.printf("Received message: key=%s, value=%s, partition=%d, offset=%d\n",
record.key(), record.value(), record.partition(), record.offset());
});
}
}
}
“test-topic” 替换为你要消费的 Kafka 主题的名称,将 “localhost:9092” 替换为 Kafka 服务器的地址,将 “test-group” 替换为你的消费者组的唯一标识符。
消费者是通过 @KafkaListener 监听消息获取的,案例如下:
package com.pany.camp.kafka;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
*
* @description: kafka 消费者
* @copyright: @Copyright (c) 2022
* @company: Aiocloud
* @author: pany
* @version: 1.0.0
* @createTime: 2023-07-14 8:31
*/
@Component
public class kafkaConsumerListenerExample {
@KafkaListener(topics = "your_topic_name", groupId = "your_consumer_group_id")
public void consume(ConsumerRecord<?, ?> record) {
Optional<?> value = Optional.ofNullable(record.value());
// 进行消息处理逻辑
System.out.println("print message: " + value);
}
}
@KafkaListener 用于监听 Kafka 主题中的消息,并在消息到达时执行相应的逻辑。
KafkaListener 注解有以下参数:
KafkaListener 的底层实现原理涉及到 Spring Kafka 的注解处理器和 Kafka 消费者的集成。
注解的处理过程:
1. 注解处理器:
2. 创建 Kafka 消费者:
3. 消费 Kafka 消息:
4. 并发处理消息:
Kafka消费者的优点是具有高吞吐量和低延迟的特性,能够处理大规模的消息流。它支持水平扩展,可以通过增加消费者实例来提高处理能力。此外,Kafka消费者还具有消息的持久化和可靠性保证,能够处理高并发的消息消费。
然而,Kafka消费者也存在一些缺点。首先,Kafka消费者的配置和管理相对复杂,需要关注许多参数和细节。其次,Kafka消费者在处理消息时需要自行管理偏移量,确保消息的有序性和正确性,这对于开发人员来说可能需要额外的工作。此外,Kafka消费者对于实时性要求较高的场景可能不太适用,因为消息的传递可能存在一定的延迟。
总的来说,Kafka消费者适用于需要处理大规模消息流的场景,对于数据的可靠性和持久化有较高要求,但在配置和管理上需要额外的注意和工作。
本文由激流原创,原创不易,希望大家关注、点赞、收藏,给博主一点鼓励,感谢!!!