背景:
在科室用无线路由器搭建了两台机器的kafka集群(master,slave1)。现想用自己的笔记本连接wifi,写producer往集群中写消息。
kafka slave1 server.propertities 配置如下:
host.name=slave1
port=9091
advertised.host.name=slave1
advertised.port=9091
zookeeper.connect=master:2181,slave1:2181
问题:
直接在笔记本(windows,没有kafka环境)上运行producer程序时报错:
Exception in thread "Thread-0" kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
kafka服务器报错:
INFO Closing socket connection to /192.168.1.101. (kafka.network.Processor)
解决办法:
修改笔记本的hosts,加入kafka集群的host:
192.168.1.104 master
192.168.1.107 slave1
再运行程序就可以在kafka集群中收到消息,具体为什么,待进一步学习。
MyProducer代码如下:
package producer;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import kafka.serializer.StringEncoder;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
/**
* Created by huangzheng on 2016/10/4.
*/
public class MyProducer extends Thread{
private String topic;
public MyProducer(String topic){
super();
this.topic = topic;
}
private Producer createProducer(){
Properties properties = new Properties();
properties.put("zookeeper.connect","192.168.1.104:2181,192.168.1.107:2181");
properties.put("serializer.class", StringEncoder.class.getName());
properties.put("metadata.broker.list","192.168.1.107:9091");
return new Producer<Integer,String>(new ProducerConfig(properties));
}
@Override
public void run() {
Producer producer = createProducer();
int i = 0;
while (true){
producer.send(new KeyedMessage<Integer,String>(topic,"message: "+i++));
try{
TimeUnit.SECONDS.sleep(1);
}catch (InterruptedException e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new MyProducer("test").start();
}
}