Kafka基础入门-代码实操

Kafka 是基于发布/订阅 模式的消息队列,消息的生产和消费都需要指定主题,因此,我们想要实现消息的传递,第一步必选是创建一个主题(Topic)。下面我们看下在命令行和代码中都是如何创建主题和实现消息的传递的。

使用命令行操作Kafka

使用命令行操作主题

执行命令之后,我们可以找到到下面这行提示,REQUIRED代表必须的,就是说我们想要实现对Kafak的操作必须要带有这个参数,表示我们要连接的Kafka具体服务。

复制代码
--bootstrap-server <String: server to    REQUIRED: The Kafka server to connect  
  connect to>                              to.   

接下来,就让我们创建一个主题吧。

复制代码
# --bootstrap-server  用于指定我们连接的Kafka服务地址,9092是默认端口号  
# --topic  指定要操作的Topic名称  
# --create 表示本次是要创建一个主题  
sh kafka-topics.sh --bootstrap-server localhost:9092 --topic test  --create
# 执行结果
Created topic test.

查看下我们的主题是否创建成功

复制代码
sh kafka-topics.sh --bootstrap-server localhost:9092 --list    
# 执行结果
test

查看某一个主题的详细信息

复制代码
sh kafka-topics.sh --bootstrap-server localhost:9092 --topic test  --describe  
# 执行结果
Topic: test	TopicId: ehyjS3R3Saq8Cx2V1x0p7g	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: test	Partition: 0	Leader: 1	Replicas: 1	Isr: 1

使用命令行消费数据

使用命令行生产数据

想了解如何启动Kafka,可以看这篇文章《Kafka基础入门》。

使用代码操作Kafka

添加依赖包

复制代码
 <dependencies>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.7.1</version>
        </dependency>
    </dependencies>

生产者代码

复制代码
        // 创建配置对象
        Map<String,Object> configMap = new HashMap<>();
        configMap.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"lcoalhost:9092");
        // 对生产的数据的K,V 进行序列化的操作
        configMap.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSelection.class.getName());
        configMap.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSelection.class.getName());

        // 创建生产者对象
        //      生产者需要设定泛型:数据类型的约束
        KafkaProducer<String,String> producer = new KafkaProducer<String,String>(configMap);
        // 创建数据
        //      构建数据时,需要传递三个参数
        //          第一个参数表示主题名称,主题不存在时会自动创建
        //          第二个参数表示数据的Key
        //          第二个参数表示数据的Value
        ProducerRecord<String,String> record = new ProducerRecord<String,String>("test","key","value");
        // 通过生产者对象,将数据发送到Kafka
        producer.send(record);
        //关闭生产者对象
        producer.close();

消费者代码

复制代码
        // 创建配置对象
        Map<String,Object> configMap = new HashMap<>();
        configMap.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"lcoalhost:9092");
        // 对生产的数据的K,V 进行反序列化的操作
        configMap.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringSelection.class.getName());
        configMap.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringSelection.class.getName());
        configMap.put(ConsumerConfig.GROUP_ID_CONFIG,"com.kafka.test");
        // 创建消费者对象
        KafkaConsumer<String,String> kafkaConsumer = new KafkaConsumer<String,String>(configMap);
        //订阅主题
        kafkaConsumer.subscribe(Collections.singleton("test"));
        // 从Kafka中获取数据
        //      消费者从Kafka中拉取数据
        ConsumerRecords<String, String> datas = kafkaConsumer.poll(1000);
        datas.forEach(data ->{
            System.out.println(data);
        });
        // 关闭消费者对象
        kafkaConsumer.close();

点击下方名片,关注『编程青衫客』

随时随地获取最新好文章!

相关推荐
风象南3 小时前
我把大脑开源给了AI
人工智能·后端
橙序员小站8 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德8 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆10 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
开心就好202511 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios
悟空码字11 小时前
告别“屎山代码”:AI 代码整洁器让老项目重获新生
后端·aigc·ai编程
小码哥_常11 小时前
大厂不宠@Transactional,背后藏着啥秘密?
后端
奋斗小强11 小时前
内存危机突围战:从原理辨析到线上实战,彻底搞懂 OOM 与内存泄漏
后端
小码哥_常12 小时前
Spring Boot接口防抖秘籍:告别“手抖”,守护数据一致性
后端
心之语歌12 小时前
基于注解+拦截器的API动态路由实现方案
java·后端