Kafka:java尝试后java客户端无法发送消息

时间:2015-06-16 14:30:48

标签: java apache-kafka

我尝试从Java应用程序向Kafka发送消息。

我能得到的是" 尝试2次后无法发送消息":

Exception in thread "main" kafka.common.FailedToSendMessageException: Failed to send messages after 2 tries.
    at kafka.producer.async.DefaultEventHandler.handle(DefaultEventHandler.scala:90)
    at kafka.producer.Producer.send(Producer.scala:77)
    at kafka.javaapi.producer.Producer.send(Producer.scala:33)
    at test.Main.main(Main.java:26)

Kafka正在远程计算机上运行,​​所以我添加到server.properties(让我们说Kafka服务器的IP地址是192.168.0.1):

host.name=192.168.0.1
advertised.host.name=192.168.0.1
advertised.port=9092

正在运行的Kafka是kafka_2.11-0.8.2.1所以我使用(我猜)适当的Java客户端版本:

<dependency>
  <groupId>org.apache.kafka</groupId>
  <artifactId>kafka_2.11</artifactId>
  <version>0.8.2.1</version>
</dependency>

Java代码:

public static void main(String[] args) {
  Properties properties = new Properties();
  properties.put("metadata.broker.list", "192.168.0.1:9092");
  properties.put("serializer.class", "test.StringEncoder");
  properties.put("key.serializer.class", "test.StringEncoder");
  properties.put("message.send.max.retries", "2");

  Producer<String, String> kafkaProducer = new Producer<String, String>(new ProducerConfig(properties));

  kafkaProducer.send(new KeyedMessage<String, String>(
      "LOG", 
      "Yo! " + new Date().toString()
  ));

  kafkaProducer.close();
}

已创建LOG主题。我可以使用(并且可以)执行Java代码的同一台机器向Kafka发送消息:

bin/kafka-console-producer.sh --broker-list 192.168.0.1:9092 --topic LOG

当Java代码失败时,Kafka和Zookeeper都没有记录任何内容。

我错过了一个特定的参数吗?

2 个答案:

答案 0 :(得分:2)

Apache kafka有一个更好的新生产者客户端:

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.8.2.0</version>
</dependency>

实施例: https://github.com/CameronGregory/kafka/blob/master/TestProducer.java

显然你的配置还可以。 “test.StringEncoder”是你的自定义类吗?尝试使用“kafka.serializer.StringEncoder”代替

答案 1 :(得分:1)

即使我遇到了同样的问题,对我来说,只需重新启动Kafka服务器就像魅力一样。也许你应该尝试重启一次。