Docker 融合平台无法将消息正确发送/使用到卡夫卡主题中
目前,我将Maven与io.fabric8 docker Maven插件一起使用,以便自动启动Kafka和ZooKeeper。这是我当前的配置,工作正常:Docker 融合平台无法将消息正确发送/使用到卡夫卡主题中,docker,apache-kafka,confluent-platform,Docker,Apache Kafka,Confluent Platform,目前,我将Maven与io.fabric8 docker Maven插件一起使用,以便自动启动Kafka和ZooKeeper。这是我当前的配置,工作正常: <properties> <zookeeper.port>2181</zookeeper.port> <kafka.host>127.0.0.1</kafka.host> <kafka.port>9092</kafka.port> &
<properties>
<zookeeper.port>2181</zookeeper.port>
<kafka.host>127.0.0.1</kafka.host>
<kafka.port>9092</kafka.port>
</properties>
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>${docker-maven-plugin.version}</version>
<configuration>
<showLogs>true</showLogs>
<images>
<image>
<name>wurstmeister/zookeeper:${zookeeper.version}</name>
<alias>zookeeper</alias>
<run>
<ports>
<port>${zookeeper.port}:2181</port>
</ports>
</run>
</image>
<image>
<name>wurstmeister/kafka:${kafka.version}</name>
<alias>kafka</alias>
<run>
<ports>
<port>${kafka.port}:9092</port>
</ports>
<links>
<link>zookeeper:zookeeper</link>
</links>
<env>
<KAFKA_ADVERTISED_HOST_NAME>${local.ip}
</KAFKA_ADVERTISED_HOST_NAME>
<KAFKA_ADVERTISED_PORT>${kafka.port}</KAFKA_ADVERTISED_PORT>
<KAFKA_ZOOKEEPER_CONNECT>zookeeper:2181</KAFKA_ZOOKEEPER_CONNECT>
<KAFKA_MESSAGE_MAX_BYTES>15000000</KAFKA_MESSAGE_MAX_BYTES>
</env>
</run>
</image>
<image>
<name>confluentinc/cp-ksql-server:5.0.0</name>
<alias>cp-ksql-server</alias>
<run>
<ports>
<port>8088:8088</port>
</ports>
<links>
<link>kafka:kafka</link>
</links>
<env>
<KSQL_BOOTSTRAP_SERVERS>${local.ip}:9092</KSQL_BOOTSTRAP_SERVERS>
<KSQL_LISTENERS>http://0.0.0.0:8088/</KSQL_LISTENERS>
<KSQL_KSQL_SERVICE_ID>confluent_test_2</KSQL_KSQL_SERVICE_ID>
</env>
</run>
</image>
</images>
</configuration>
</plugin>
我可以在那里看到我的主题:
可能有什么问题,如何解决
已更新
我在应用程序中启用了Kafka上的调试日志,现在可以看到以下错误:
java.io.IOException: Can't resolve address: broker:9092
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:235) ~[kafka-clients-1.1.0.jar:na]
at org.apache.kafka.common.network.Selector.connect(Selector.java:214) ~[kafka-clients-1.1.0.jar:na]
at org.apache.kafka.clients.NetworkClient.initiateConnect(NetworkClient.java:793) [kafka-clients-1.1.0.jar:na]
at org.apache.kafka.clients.NetworkClient.ready(NetworkClient.java:230) [kafka-clients-1.1.0.jar:na]
at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.sendEligibleCalls(KafkaAdminClient.java:792) [kafka-clients-1.1.0.jar:na]
at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1002) [kafka-clients-1.1.0.jar:na]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]
Caused by: java.nio.channels.UnresolvedAddressException: null
at sun.nio.ch.Net.checkAddress(Net.java:101) ~[na:1.8.0_171]
at sun.nio.ch.SocketChannelImpl.connect(SocketChannelImpl.java:622) ~[na:1.8.0_171]
at org.apache.kafka.common.network.Selector.doConnect(Selector.java:233) ~[kafka-clients-1.1.0.jar:na]
... 6 common frames omitted
无法解析地址:broker:9092
卡夫卡正在回到它所知道的客户和听众那里
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
基本上,bootstrap.servers
只需要至少一个地址,但其余的Kafka集群地址将返回到客户端,以便与各个代理建立连接
当您在Docker网络外部连接到localhost:9092
时,Docker端口转发将工作,但随后Kafka返回到您的客户端broker:9092
,客户端将断开连接,因为您尚未在主机和Docker网络之间设置DNS(除非使用Docker Swarm,否则不需要设置)
您的解决方案将是两种选择
localhost:29092
,事情可能会开始变得更好kafka:9092
参考(这类似于KSQL和Control Center容器的工作方式)如果您只是使用Docker Compose,不知道为什么要显示Maven片段。您可以将监视拦截器添加到wurstmeister映像中,但是这需要更多的工作。只是为了显示逻辑正常工作的先前配置。也许这将有助于更好地理解合流堆栈的问题。现在我不知道可能有什么问题。
“主题分区的x记录过期:自批创建以来已过XX毫秒”
是经纪人或制作人的问题。您是否看到其中任何一个的日志表明存在问题?您一次发送多少条消息?Kafka Producer将批处理记录,因此您可能需要发送100条,或者至少设置一个while loop,我只是使用与Maven配置完全相同的场景-我只发送一条测试消息。有了Maven配置,一切都很好,有了Confluent stack,出现了上面提到的问题。这是Docker容器中的卡夫卡日志-非常感谢!!!现在一切都很顺利!
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092