请教,这样配置kafka为何不能被外网访问?

摩迦迪沙 发表于: 2018-01-09   最后更新时间: 2021-10-19 11:34:35   13,106 游览

现有服务器3台组集群,均在内网,端口都是9092

A:10.100.234.201
B: 10.100.234.202
C: 10.100.234.203

A服务器kafka的配置

listeners=PLAINTEXT://10.100.234.201:9092
advertised.listeners=PLAINTEXT://localdomain01:9092

A服务器hosts文件添加

10.100.234.201   localdomain01
10.100.234.202   localdomain02
10.100.234.203   localdomain03

B,C两台服务器配置类似

整个集群通过端口映射到外网

10.100.234.201 : 9092 ->    1.2.3.4 : 9092
10.100.234.202 : 9092 ->    1.2.3.4 : 9093
10.100.234.203 : 9092 ->    1.2.3.4 : 9094

以上外网IP端口均能telnet通

尝试:
一台阿里云主机作为生产者访问这个集群,阿里云服务器hosts文件添加 【1.2.3.4 localdomain01 localdomain02 localdomain03】

执行

./kafka-topics.sh --list --zookeeper localdomain01:2181 可以得到结果,列出了所有topic

执行

./kafka-console-producer.sh --broker-list localdomain01:9092 --topic remoteTopic
报错:
[2018-01-09 10:48:44,925] WARN Got error produce response with correlation id 14 on topic-partition remoteTopic-0, retrying (2 
attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)

[2018-01-09 10:48:45,069] WARN Got error produce response with correlation id 16 on topic-partition remoteTopic-0, retrying (1 
attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)

[2018-01-09 10:48:45,213] WARN Got error produce response with correlation id 18 on topic-partition remoteTopic-0, retrying (0 
attempts left). Error: NOT_LEADER_FOR_PARTITION (org.apache.kafka.clients.producer.internals.Sender)

[2018-01-09 10:48:45,358] ERROR Error when sending message to topic remoteTopic with key: null, value: 3 bytes with error: (org
.apache.kafka.clients.producer.internals.ErrorLoggingCallback)
org.apache.kafka.common.errors.NotLeaderForPartitionException: This server is not the leader for that topic-partition.

请教大家这样配置有什么问题,需要怎样配置?

发表于 2018-01-09
添加评论

补充:如何配置kafka外网转发:
kafka外网转发

问题更新:
在内网生产和消费消息没有问题
但是在外网出现奇怪的现象:
第1条消息生产成功,第2条和第3条失败,第4条消息又成功,如此循环
从报错信息看,消息只能被发送到某一个分区,当发送到其他2个分区时,就报找不到分区的leader

半兽人 -> 摩迦迪沙 6年前

你看下第二个分区在哪个节点下

摩迦迪沙 -> 半兽人 6年前

在zookeeper中,B服务器是leader(broker-2:10.100.234.202)

下面是topic的分区情况

Topic:remoteTopic PartitionCount:3 ReplicationFactor:3 Configs:
Topic: remoteTopic Partition: 0 Leader: 2     Replicas: 2,1,3 Isr: 1,2,3
Topic: remoteTopic Partition: 1 Leader: 3     Replicas: 3,2,1 Isr: 1,2,3
Topic: remoteTopic Partition: 2 Leader: 1     Replicas: 1,3,2 Isr: 1,2,3
半兽人 -> 摩迦迪沙 6年前

你执行下这个命令:

bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server 1.2.3.4:9093 --list
摩迦迪沙 -> 半兽人 6年前

改变端口号,配置成功了

A:9092    B:9093     C:9094

按以前的配置,kafka集群在zk中的注册信息是

localdomain01:9092
localdomain02:9092
localdomain03:9092

改变之后变为:

localdomain01:9092
localdomain02:9093
localdomain03:9094

然后端口映射做了相应的修改

10.100.234.201 : 9092 ->    1.2.3.4 : 9092
10.100.234.202 : 9093 ->    1.2.3.4 : 9093
10.100.234.203 : 9094 ->    1.2.3.4 : 9094

但不知道以前那种配置为什么不行,按说不同hostname可以区分broker,为什么还要端口不同?

半兽人 -> 摩迦迪沙 6年前

kakfa客户端内部获取你集群的地址全貌,获取的是

10.100.234.201:9092, 10.100.234.202:9092,10.100.234.203:9092

kafka客户端把这些内网10.100.234.201-203转换为你提供的外网地址1.2.3.4。

摩迦迪沙 -> 半兽人 6年前

多谢,我再研究下

你的答案

查看kafka相关的其他问题或提一个您自己的问题