如何使用动态dns设置公共kafka代理?

wgeznvg7  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(845)

我配置了一个带有3个代理的kafka集群,每个代理使用3个zookeers。下面的图展示了我的集群的图形表示。

在同一网络中使用主机的生产者和消费者测试 192.168.0.10 通过 kafka-console-producer 以及 kafka-console-consumer 命令。
基于这种背景,当我试图通过 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:20772]向主题推特发送消息时出错,按键为空,值:16字节,有错误:(org.apache.kafka.clients.producer.internals.errorloggingcallback)org.apache.kafka.common.errors.timeoutexception:twitter的1条记录过期\u tweets-1:自批创建加上延迟时间[2018-12-10 09:59:22,273]无法建立到节点1的warn[producer clientid=console producer]连接。代理可能不可用(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.10 以及 Kafka 2.0.1 对于那个设置。telnet测试成功了。另一个转发到kafka rest代理端口的是通过internet工作并列出所有主题。

y4ekin9u

y4ekin9u1#

看到了吗https://rmoff.net/2018/08/02/kafka-listeners-explained/
您需要两个侦听器一个响应并公布内部地址,一个用于外部地址。
关键是您的客户机连接到的侦听器将返回该侦听器的主机地址和端口。
目前,你正在欺骗你的外部一个到你的内部一个,你的外部流量因此击中了内部侦听器。
您需要这样的东西(改变 aws_internal_listener 根据经纪人的要求):

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 调试和验证配置,如本文所述。

相关问题