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();

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

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

相关推荐
小碗羊肉6 分钟前
【JavaWeb | 第四篇】分层解耦
java·后端·servlet
薪火铺子17 分钟前
Redis 分布式锁与 Redisson 原理深度解析
java·redis·分布式·后端
安当加密1 小时前
Spring Boot应用接入国产安当凭据管理系统SMS Starter实战(附源码)
java·spring boot·后端
树下水月1 小时前
Easyswoole 框架session在高并发/频繁请求下数据丢失问题记录
java·后端·spring
用户6757049885022 小时前
密码泄露了?别慌!GitHub、微软、Google都在用的“虚拟MFA”,到底有多强?
后端·安全
源图客2 小时前
Go语言goland代码编辑与调试
开发语言·后端·golang
用户6757049885022 小时前
改了DNS还是不生效?Ubuntu 24.04的这个坑我帮你踩过了
后端·ubuntu·dns
文心快码BaiduComate2 小时前
Comate Spec模式实践:电商视频自动化生产数据库eDB-MCP服务开发
前端·后端·架构
神奇小汤圆2 小时前
我想带你动手走一遍最简单的 Harness Engineering
后端
卷无止境2 小时前
Rust写大型项目时,编译太慢怎么办?
后端