如何使用动态DNS设置公开的Kafka经纪人?

时间:2018-12-10 12:22:45

标签: apache-kafka centos6 noip

我使用3个Zookeeper和每个代理配置了具有3个代理的Kafka群集。下面的图显示了我的群集的图形表示。

enter image description here

使用主机192.168.0.10在同一网络中的生产者和消费者测试通过kafka-console-producerkafka-console-consumer命令可以很好地工作。

基于这种情况,当我尝试通过Internet通过kafka-console-producer.sh --broker-list DYNAMIC_DNS_ADDR:30192,DYNAMIC_DNS_ADDR:30292,DYNAMIC_DNS_ADDR:30392 --topic twitter_tweets生成一些数据时,出现以下错误:

  

[2018-12-10 09:59:20,772]错误将消息发送到主题twitter_tweets时发生错误,其键为:null,值:16个字节,错误为:(org.apache.kafka.clients.producer.internals.ErrorLoggingCallback)   org.apache.kafka.common.errors.TimeoutException:twitter_tweets-1的1条记录已过期:自创建批处理以来,经过了1505 ms的时间   [2018-12-10 09:59:22,273]警告[Producer clientId = console-producer]无法建立到节点1的连接。经纪人可能不可用。 (org.apache.kafka.clients.NetworkClient)

代理侦听器配置有以下属性:

listeners=PLAINTEXT://0.0.0.0:9092,SSL://0.0.0.0:9443
advertised.listeners=PLAINTEXT://192.168.0.241:9092,SSL://192.168.0.241:9443

很明显,每个代理的IP地址都更改了advertised.listeners属性。我正在为此设置使用CentOS 6.10Kafka 2.0.1。 telnet测试有效。另一个指向Kafka REST代理端口的转发器正在通过Internet工作并列出所有主题。

1 个答案:

答案 0 :(得分:1)

请参见https://rmoff.net/2018/08/02/kafka-listeners-explained/

您需要两个侦听器-一个用于响应并发布广告内部地址,一个用于外部地址。

关键是客户端连接到的监听器将返回该监听器的主机地址和端口

此刻,您将外部设备欺骗为内部设备,而您的外部流量正在冲击内部内部监听器。

您需要这样的内容(根据每个代理的要求更改aws_internal_listener的IP /主机名):

KAFKA_LISTENERS: aws_internal_listener://192.168.0.241:9092,external_listener://192.168.0.241:29092

KAFKA_ADVERTISED_LISTENERS: aws_internal_listener://192.168.0.241:9092,external_listener://DYNAMIC_DNS_ADDR:29092

KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: aws_internal_listener:PLAINTEXT,external_listener:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: aws_internal_listener

然后,您的DYNAMIC_DNS_ADDR端口转发器应将连接重定向到AWS节点上的29092。关键是,外部连接不应最终在与内部侦听器匹配的主机的侦听器端口上结束(该主机通告内部192.168.0地址)

使用kafkacat -L -b DYNAMIC_DNS_ADDR:29092来调试和验证您的配置,如in the article here所述。