在学习Kafka数据去重时,一直报错!报错如下图所示:
package com.atguigu.kafka.producer;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
import java.util.Properties;
public class CustomProducerTransactions {
public static void main(String[] args) {
// 0 配置
Properties properties = new Properties();
// 连接集群 bootstrap.servers
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "node01:9092,node02:9092,node03:9092");
// 指定对应的key和value的序列化类型 key.serializer
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
// 指定事务id
properties.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "tranactional_id_01");
// 1 创建kafka生产者对象
// "" hello
KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);
kafkaProducer.initTransactions();
kafkaProducer.beginTransaction();
try {
// 2 发送数据
for (int i = 0; i < 5; i++) {
kafkaProducer.send(new ProducerRecord<>("first", "hello" + i));
}
kafkaProducer.commitTransaction();
} catch (Exception e) {
kafkaProducer.abortTransaction();
} finally {
// 3 关闭资源
kafkaProducer.close();
}
}
}
控制台输入:
bin/kafka-topics.sh --bootstrap-server node02:9092 --list
并且我还发现第三台虚拟机总是出现这样的警告!
困扰了我两天终于解决了!
首先三台虚拟机分别配置server.properties文件
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://当前虚拟机的ip地址:9092
之后关闭kafka集群,
bin/kafka-server-stop.sh
重启kafka集群
bin/kafka-server-start.sh -daemon config/server.properties
然后重新查看当前服务器中的所有 topic
bin/kafka-topics.sh --bootstrap-server node03:9092 --list
不再出现警告了!
后面又重新运行了java代码,也成功了!!