admin管理员组文章数量:1608599
Kafka报Connection refused错基本是每个新手都会遇见的挺常见的一个错误,大半原因都是因为配置文件配置错误(要么配置ip有问题,要么是端口问题)。我们都知道,关于消息的发布和订阅,从某种角度而言,Kafka比activeMQ更高效。但是启动kafka,首先要确保安装了zookeeper(建议安装zookeeper,避免采用Kafka自带)。
import java.util.Properties;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
public class ProducerTest {
public static void main(String[] args) {
Properties props = new Properties(); //读取配置文件
props.put("bootstrap.servers", "http://128.1.136.129:9092");
//设置为all将导致记录的完整提交阻塞,最慢的,但最持久的设置。
props.put("acks", "all");
//如果请求失败,生产者也会自动重试,即使设置成0
props.put("retries", 0);
props.put("batch.size", 16384);
// 默认立即发送,这里这是延时毫秒数
props.put("linger.ms", 1);
// 生产者缓冲大小,当缓冲区耗尽后,额外的发送调用将被阻塞。时间超过max.block.ms将抛出TimeoutException
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafkamon.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafkamon.serialization.StringSerializer");
// 创建kafka的生产者类
Producer<String, String> producer = new KafkaProducer<String, String>(props);
// 生产者的主要方法
producer.send(new ProducerRecord<String, String>("show", "测试Kafka"));
producer.close();
}
}
启动运行就会抛出如下异常:
java.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.apache.kafkamonwork.PlaintextTransportLayer.finishConnect(PlaintextTransportLayer.java:51)
at org.apache.kafkamonwork.KafkaChannel.finishConnect(KafkaChannel.java:73)
at org.apache.kafkamonwork.Selector.pollSelectionKeys(Selector.java:323)
at org.apache.kafkamonwork.Selector.poll(Selector.java:291)
at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:260)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:236)
at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:148)
at java.lang.Thread.run(Thread.java:745)
首先检查配置,IP和端口没错,那么确认该9092的防火墙是否关闭(防火墙开启也会Connection refused),如果确认防火墙已经关闭,那么检查Kafka的配置:在/config/service.properties中,添加配置:host.name=128.1.136.129
为什么要配置IP呢?是因为kafka默认监听localhost的端口,所以如果你要连接远程服务器,必须配置IP。
启动自己安装的zookeeper服务命令:
nohup ./bin/kafka-server-start config/server-properties &
关闭防火墙将9092端口设置通过:
vi /etc/sysconfig/iptables
添加 -A INPUT -m state --state NEW -m tcp -p tcp --dport 9092 -j ACCEPT
然后重启防火墙:
systemctl restart iptables.service
启动自带的zookeeper服务命令(在kafka安装目录):
bin/zookeeper-server-start.sh config/zookeeper.properties
启动kafka服务
bin/kafka-server-start.sh config/server.properties
使用消费者客户端,监听show的topic,验证是否已经启动了Kafka
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic show --from-beginning
上述技巧基本可以解决大部分Connected Refused问题,但是今天我遇见个很有意思的,在windows环境下连接被拒,原因就是启动zookeeper以后就未管(其实zookeeper已经闪退),而是直接启动kafka。
需要注意啊,为什么建议自己安装zookeeper,而且启动命令用nohup(Linux环境下),就是避免退出窗口导致启动失效,windows环境下,如果启动zookeeper闪退,需要配置(网上教程很多)以保证zookeeper启动成功。
Connected Refused常见解决办法:
1.确认config里面的server.properties 正确(包括IP+端口,用hostname的话记得etc/hostnames下面查看全部配置上没,建议用hostname方便以后维护也减少错误)
2.服务器之间时间要统一
3.zkServer.sh start要确认全部启动(至少启动一半) 可以用JPS查看
4.java -version记得查看(确认jdk版本)
版权声明:本文标题:Kafka报错:java.net.ConnectException: Connection refused: no further information 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728548188a1163112.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论