现有服务器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.
请教大家这样配置有什么问题,需要怎样配置?
补充:如何配置kafka外网转发:
kafka外网转发
问题更新:
在内网生产和消费消息没有问题
但是在外网出现奇怪的现象:
第1条消息生产成功,第2条和第3条失败,第4条消息又成功,如此循环
从报错信息看,消息只能被发送到某一个分区,当发送到其他2个分区时,就报找不到分区的leader
你看下第二个分区在哪个节点下
在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
你执行下这个命令:
bin/kafka-consumer-groups.sh --new-consumer --bootstrap-server 1.2.3.4:9093 --list
改变端口号,配置成功了
按以前的配置,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,为什么还要端口不同?
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。多谢,我再研究下
你的答案