3. 新版本的生产者API 带有回调函数的生产者

1. 开启进程

[node123]systemctl stop firewalld
[node123]zkServer.sh start
[node123]kafka-server-start.sh /opt/app/kafka-0.11.0.0/config/server.properties &
[node1]kafka-console-consumer.sh --zookeeper node1:2181 --topic demo

2. java导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>kafkacode</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.11.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.12</artifactId>
<version>0.11.0.0</version>
</dependency>
</dependencies>
</project>

3. java代码

package new_callback_pro;
import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import java.util.Properties;
// 新版本的生产者API 带有回调函数的生产者
public class NewProducerCallBack {
public static void main(String[] args) {
// 1、定义生产者连接Kafka集群的配置项 key-value格式的
Properties prop = new Properties();
prop.put("bootstrap.servers", "192.168.200.111:9092,192.168.200.112:9092,192.168.200.113:9092");
// key序列化
prop.put("key.serializer", "org.apache.kafka.common.serialization.IntegerSerializer");
// value序列化
prop.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
// 2. 创建一个生产者
KafkaProducer<Integer, String> producer = new KafkaProducer<Integer, String>(prop);
// 3. 使用生产者向某个主题发送一个数据
for (int i = 0; i < 100; i++) {
// 生产者需要发送的消息
/*
第一个参数指的是topic,
第二个参数i用来计算分区,
第三个参数用来生产数据
*/
ProducerRecord<Integer, String> record = new ProducerRecord<Integer, String>("demo", i, "message" + i);
producer.send(record, new Callback() {
/**
* 方法就是kafka生产者消息发送完成之后,触发的一个回调函数
* @param recordMetadata 包含当前这个消息在Topic主题中的分区和offset
* @param e
*/
public void onCompletion(RecordMetadata recordMetadata, Exception e) {
System.out.println("当前这个数据的分区为:"+recordMetadata.partition() + "---" + recordMetadata.offset());
System.out.println("当前的主题为"+recordMetadata.topic());
System.out.println("key为:" + recordMetadata.serializedKeySize() + "---value为:" + recordMetadata.serializedValueSize());
}
});
}
// 4. 代表将生产者生产的数据刷新到topic中
producer.flush();
}
}

4. 效果图

posted @   jsqup  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示