spark kafka directstream java.io.EOFException: Received -1 when reading from channel, socket has lik

本文解析了 Spark Direct Stream 在消费 Kafka 数据时出现的 EOF 异常问题,详细介绍了错误原因在于配置中将 Zookeeper 端口误作为 Kafka 的 broker 端口,导致无法发现生产者数据。通过更正 broker 配置为正确的 Kafka 端口,问题得以解决。同时,文章还提到了可能需要检查 Kafka 的 server.properties 配置文件。

spark directstream 消费kafka数据的时候出现报错
java.io.EOFException: Received -1 when reading from channel, socket has likely been closed.
在这里插入图片描述
val brokers = “hadoop:2181”
val kafkaParams = Map[String,String](“metadata.broker.list” -> brokers,
//smallest : 自动把offset设为最早的offset数据;
//largest : 自动把offset设为最新的offset数据;
“auto.offset.reset” -> “smallest”,
“serializer.class” -> “kafka.serializer.StringDecoder”)
val lines = KafkaUtils.createDirectStreamString,String,StringDecoder,StringDecoder.map(_._2)

问题就在于brokers
brokers是kafka生产者的端口,错在填了ZK的端口,所以无法发现生产数据,所以报错是里边没数据。
只要把brokers="hadoop:9092"就可以正常找到生产数据,并且可以正常消费了。

如果还是有问题就要看看kafka配置文件,server.properties
添加这个配置就好
listeners=PLAINTEXT://:9092
或者直接添加
port=9092
都可以

ambari-2.7.6平台因kafka开启sasl,atlas集成hive时,hive往kafka的ATLAS_ENTITIES ATLAS_HOOKtopic中写入数据报错如下: at java.lang.Thread.run(Thread.java:748) [?:1.8.0_311] 2025-09-08T01:42:12,010 WARN [kafka-producer-network-thread | producer-1]: clients.NetworkClient (:()) - [Producer clientId=producer-1] Error connecting to node bdp155:6667 (id: -1 rack: null) java.io.IOException: Channel could not be created for socket java.nio.channels.SocketChannel[closed] at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:348) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.Selector.registerChannel(Selector.java:329) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.Selector.connect(Selector.java:256) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:987) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.NetworkClient.access$600(NetworkClient.java:73) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1158) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.NetworkClient$DefaultMetadataUpdater.maybeUpdate(NetworkClient.java:1046) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:559) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:327) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:242) ~[kafka-clients-2.8.2.jar:?] at java.lang.Thread.run(Thread.java:748) [?:1.8.0_311] Caused by: org.apache.kafka.common.KafkaException: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:240) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:338) ~[kafka-clients-2.8.2.jar:?] ... 10 more Caused by: org.apache.kafka.common.errors.SaslAuthenticationException: Failed to configure SaslClientAuthenticator Caused by: org.apache.kafka.common.KafkaException: Principal could not be determined from Subject, this may be a transient failure due to Kerberos re-login at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.firstPrincipal(SaslClientAuthenticator.java:632) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.security.authenticator.SaslClientAuthenticator.<init>(SaslClientAuthenticator.java:202) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.SaslChannelBuilder.buildClientAuthenticator(SaslChannelBuilder.java:286) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.SaslChannelBuilder.lambda$buildChannel$1(SaslChannelBuilder.java:228) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.KafkaChannel.<init>(KafkaChannel.java:143) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.SaslChannelBuilder.buildChannel(SaslChannelBuilder.java:236) ~[kafka-clients-2.8.2.jar:?] at org.apache.kafka.common.network.Selector.buildAndAttachKafkaChannel(Selector.java:338) ~[kafka-clients-2.8.2.jar:?] ... 10 more 2025-09-08T01:42:12,010 WARN [kafka-producer-network-thread | producer-1]: clients.NetworkClient (:()) - [Producer clientId=producer-1] Bootstrap broker bdp155:6667 (id: -1 rack: null) disconnected ^C
最新发布
09-09
在 ambari - 2.7.6 平台,当 Kafka 开启 SASL 认证,Atlas 集成 Hive 往 Kafka 的 ATLAS_ENTITIES 和 ATLAS_HOOK topic 写入数据出现 `java.io.IOException: Channel could not be created for socket java.nio.channels.SocketChannel[closed]` 错误,以下是一些解决办法: ### 1. 检查 Kafka SASL 配置 确保 Kafka 的 SASL 配置正确,在 `conf/consumer.properties` 和 `conf/producer.properties` 添加以下两行: ```properties security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN ``` 同时,在 `kafka-console-consumer.sh` 和 `kafka-console-producer.sh` 添加 `-Djava.security.auth.login.config=/opt/kafka_client_jaas.conf`,修改后示例如下: ```bash exec $(dirname $0)/kafka-run-class.sh -Djava.security.auth.login.config=/opt/kafka_client_jaas.conf kafka.tools.ConsoleProducer "$@" ``` 消费和生产命令示例: ```bash # 消费 bin/kafka-console-consumer.sh --bootstrap-server ambari1:6667 --topic topic01 --from-beginning --consumer.config conf/consumer.properties --group test-consumer-group # 生产 bin/kafka-console-producer.sh --broker-list ambari1:6667 --topic topic01 --producer.config conf/producer.properties ``` 此配置参考了 Kafka 开启 SASL 认证的常规配置方式 [^2]。 ### 2. 检查 Hive 配置 确保 Hive 配置中包含正确的 Kafka SASL 认证信息,在 Hive 的配置文件中添加类似以下配置: ```properties hive.kafka.security.protocol=SASL_PLAINTEXT hive.kafka.sasl.mechanism=PLAIN hive.kafka.sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="your_username" password="your_password"; ``` ### 3. 检查网络连接 确保 Hive 所在节点与 Kafka 所在节点之间网络连接正常,可以使用 `ping` 和 `telnet` 命令进行测试: ```bash ping <kafka_node_ip> telnet <kafka_node_ip> <kafka_port> ``` ### 4. 检查 JAAS 文件 确保 `kafka-jaas.conf` 文件存在且配置正确,文件内容示例: ```properties KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username="your_username" password="your_password"; }; ``` ### 5. 检查 Kafka 服务状态 确保 Kafka 服务正常运行,可以通过 Ambari 界面或者命令行检查 Kafka 服务状态,如重启 Kafka 服务: ```bash ambari-server restart kafka ``` ### 6. 开启调试信息 添加 `-X` 打印 debug 信息,失败重试,如 `-rf :ambari-web`,可以帮助定位问题 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值