Java 创建Kafka Producer以发送列表中的每条消息

Java 创建Kafka Producer以发送列表中的每条消息,java,list,apache-kafka,Java,List,Apache Kafka,我让卡夫卡和动物园管理员在docker机器上运行 我需要使用springboot向kafka发送kafka消息 信息列表: [[{"id":"0x804f","timestamp":1551684977690}], [{"id":"1234","timestamp":155168497800}], [{"id":"39339e82-6bd6-4ab6-9672-21d0df4d34eb","timestamp":1551684977690}], [{"id":"a3173ca5-4cc4-

我让卡夫卡和动物园管理员在docker机器上运行

我需要使用springboot向kafka发送kafka消息

信息列表:

[[{"id":"0x804f","timestamp":1551684977690}],

[{"id":"1234","timestamp":155168497800}],

[{"id":"39339e82-6bd6-4ab6-9672-21d0df4d34eb","timestamp":1551684977690}],

[{"id":"a3173ca5-4cc4-408b-a058-879a298d6081","timestamp":155168497800}]]
这就是我尝试的示例:

import java.util.Properties;

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;

public class Producer {
private Properties properties = new Properties();
String topicName = "tslistsbc";

public Producer(){
    String bootstrapServer = "docker-machineIP:9092";
    String keySerializer = StringSerializer.class.getName();
    String valueSerializer = StringSerializer.class.getName();
    String producerId = "simpleProducer";
    int retries = 2;

    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServer);
    properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, keySerializer);
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, valueSerializer);
    properties.put(ProducerConfig.CLIENT_ID_CONFIG, producerId);
    properties.put(ProducerConfig.RETRIES_CONFIG, retries);

    KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);
    KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);
    String value = "sample list"
    ProducerRecord<String, String> producerRecord = new ProducerRecord<>(topicName, "1",value);
    kafkaProducer.send(producerRecord);
    kafkaProducer.close();
}
错误消息

SLF4J: Failed toString() invocation on an object of type [org.apache.kafka.clients.NodeApiVersions]
Reported exception:
java.lang.NullPointerException
    at org.apache.kafka.clients.NodeApiVersions.apiVersionToText(NodeApiVersions.java:167)

它不工作,消息不会被发送。

由于您试图从docker compose启动的服务外部访问docker compose容器之一(例如,通过在IDE中运行服务),因此需要将docker容器名称添加到系统的主机文件中

在Linux/Mac中,主机文件位于/etc/hosts,在Windows中,主机文件位于c:\Windows\system32\drivers\etc\hosts。根据您收到的错误,您的hosts文件应该有如下条目:

127.0.0.1 image-kafka

关于例外情况

SLF4J: Failed toString() invocation on an object of type 
[org.apache.kafka.clients.NodeApiVersions]
Reported exception:
java.lang.NullPointerException
    at org.apache.kafka.clients.NodeApiVersions.apiVersionToText(NodeApiVersions.java:167)

这是由于使用的Kafka服务器版本与Kafka客户端版本()不匹配造成的.

您看到了什么错误?@randomInstanceFlivingThing我没有收到任何错误您正在使用哪个docker映像?您在应用程序调试日志中看到了什么?@randomInstanceFlivingThing java.io.IOException:无法解析地址:org.apache.kafka.common.network.Selector.connect(Selector.java:182)上的映像kafka:9092org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:629)org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:186)org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:184)org.apache.kafka.clients.producer.producer.internals.Sender.Sender.run(Sender.java:139)java.base/java.lang.Thread.run(Thread.java:834)原因:java.nio.channels.UnsolvedAddressException:Null如何获取kafka服务器版本..命令是什么从docker compose kafka服务中的映像名称可以明显看出kafka服务器版本。kafka客户端库版本将是您在Gradle/Maven构建文件中指定的任何版本。请不要建议使用主机文件的gest。出于某种原因,播发的侦听器是可配置的属性
SLF4J: Failed toString() invocation on an object of type 
[org.apache.kafka.clients.NodeApiVersions]
Reported exception:
java.lang.NullPointerException
    at org.apache.kafka.clients.NodeApiVersions.apiVersionToText(NodeApiVersions.java:167)