Spark streaming(v2.1.0)是指Kafka(v.0.10.0)经纪人的主机名(不是他们的IP地址)

时间:2016-12-31 02:12:08

标签: apache-spark apache-kafka spark-streaming

我使用以下Kafka设置:

linearLayout.addView(drawAnim);

所有Kafka代理都使用相应的IP地址定义(如上所示)。

但是,当我启动流式上下文时,我收到以下错误:

val kafkaParams = Map[String, Object](
  "bootstrap.servers" -> "10.30.3.41:9092,10.30.3.42:9092,10.30.3.43:9092",
  "key.deserializer" -> classOf[StringDeserializer],
  "value.deserializer" -> classOf[StringDeserializer],
  "group.id" -> "123",
  "auto.offset.reset" -> "latest",
  "enable.auto.commit" -> (false: java.lang.Boolean)
)

broker1 是我的经纪人的主机名。由于我没有在群集中设置DNS,因此无法从所有节点解析此名称。我可以通过在所有节点上16/12/31 01:46:06 DEBUG NetworkClient: Error connecting to node 1 at broker1:9092: java.io.IOException: Can't resolve address: broker1:9092 at org.apache.kafka.common.network.Selector.connect(Selector.java:171) at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:498) at org.apache.kafka.clients.NetworkClient.access$400(NetworkClient.java:48) ... Caused by: java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:101) at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) at org.apache.kafka.common.network.Selector.connect(Selector.java:168) ... 31 more 上正确添加所有代理主机名来解决此问题。不幸的是,我真的不想管理/etc/hosts,我真的想了解为什么Spark不仅通过他们的IP地址连接到代理,因为我在/etc/hosts下明确列出了它们。

1 个答案:

答案 0 :(得分:1)

我认为你的Kafka配置比Spark更成问题。可能listenersadvertised.listeners未设置或配置为使用主机名。如果确实如此,这些值会被广告给消费者并导致观察到的行为。

将代理配置为使用这些属性的IP地址可以解决问题:

# Adjust security protocol according to your requirements
# and replace public_host_ip with desired IP 
listeners=PLAINTEXT://public_host_ip:9092 # or 0.0.0.0:9092
advertised.listeners=PLAINTEXT://public_host_ip:9092