无法远程连接kafka写producer

阿宅 发表于: 2018-01-30   最后更新时间: 2018-02-26 17:29:52   5,528 游览

我是初学者,今天刚跟着网络视频学习配置。
配置了3台虚拟机,ip地址分别为xx.xx.xx.145,xx.xx.xx.146,xx.xx.xx.147,然后我在windows上用eclipse写java代码
跟着视频写的java代码如下:

package com.bigdata.kafka;

import java.util.Properties;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;

public class ProducerTest {

    private final Producer<String,String> producer;
    public final static String TOPIC="test";


    private ProducerTest() {
        Properties props=new Properties();
        //存放kafkaip地址和端口
        props.put("metadata.broker.list", "xx.xx.xx.145:9092");
        //配置value的序列化类
        props.put("serializer.class","kafka.serializer.StringEncoder");
        //配置key的序列化类
        props.put("key.serializer.class", "kafka.serializer.StringEncoder");

        /*
         * 0:意味着生产者不等待来自broker同步完成的确认,继续发送下一条数据
         * 1:producer在leader成功收到数据并确认后发送下一条message
         * -1:意味着producer在follower副本确认收到数据后才算是一次完成
         */

        props.put("request.required.acks", "-1");

        producer=new Producer<String,String>(new ProducerConfig(props));
    }

    void produce() {
        int messageNo=1;
        final int COUNT=10;

        while(messageNo<COUNT) {
            String key=String.valueOf(messageNo);
            String data="hello kafka message"+key;

            producer.send(new KeyedMessage<String,String>(TOPIC,key,data));
            System.out.println(data);
            messageNo++;
        }
    }


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        new ProducerTest().produce();
    }

}

报错如下:

Exception in thread "main" kafka.common.FailedToSendMessageException: Failed to send messages after 3 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 com.bigdata.kafka.ProducerTest.produce(ProducerTest.java:43)
    at com.bigdata.kafka.ProducerTest.main(ProducerTest.java:53)

如果我在虚拟机上,用其中一台作为producer,剩下两台作为consumer,是没有问题的,可以正常运行。但用eclipse连接就不行。防火墙我也关掉了。

关于server.properties的配置,我在xx.xx.xx.145机子上配置了host.name=该机ip地址了。

搞了大半天了还没搞定,心累。

发表于 2018-01-30

请问一下,你看的是什么教程?

已解决.....
是advertised host name 没配置的问题...用的是0.9版的kafka,查了下,没配置advertised host name的话并不像备注里说的那样会用host.name的值....

半兽人 -> 阿宅 6年前

0.9版本后,最好用listeners。

半兽人 -> 阿宅 6年前

0.9版本后,最好用listeners。

阿宅 -> 半兽人 6年前

好的,感谢

你的答案

查看kafka相关的其他问题或提一个您自己的问题