多代理、多服务器集群中的 Kafka 生产者无法写入新创建的主题
Kafka producer in a multi-broker, multi-server cluster cannot write to newly created topic
我有一个包含 2 个代理的 Kafka 集群,每个代理都在自己的 (AWS) 服务器上(我使用说明 here 设置集群)。我正在使用 SASL(但没有加密)。在运行代理 2 的服务器 2 上,我创建了一个主题:
KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf" \
bin/kafka-topics.sh --create \
--zookeeper zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo \
--replication-factor 2 --partitions 9 --topic another-test-topic
看似成功,因为描述主题表明它至少是创建的:
KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf" \
bin/kafka-topics.sh --describe \
--zookeeper zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo
Topic:another-test-topic PartitionCount:9 ReplicationFactor:2 Configs: MarkedForDeletion:true
Topic: another-test-topic Partition: 0 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 1 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 2 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 3 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 4 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 5 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 6 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 7 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 8 Leader: none Replicas: 2,1 Isr:
如您所见,该主题没有分配领导者,也没有同步副本。我已将写入权限分配给生产者:
KAFKA_HEAP_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Xmx256M -Xms128M" \
bin/kafka-acls.sh --authorizer-properties \
zookeeper.connect=zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo \
--add --allow-principal User:producer1 --producer --topic another-test-topic
...
Current ACLs for resource `Topic:another-test-topic`:
User:producer1 has Allow permission for operations: Describe from hosts: *
User:producer1 has Allow permission for operations: Write from hosts: *
但是,我的制作人无法写入此主题:
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" \
bin/kafka-console-producer.sh \
--broker-list server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 \
--topic another-test-topic --producer.config config/sasl-producer.properties
>this is a test message
[2018-01-07 21:16:02,650] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
此主题在 ZooKeeper 节点上的 ACL 是:
[zk: zookeeper-server-03.eigenroute.com:2181(CONNECTED) 8] getAcl /apps/kafka-cluster-demo/brokers/topics/another-test-topic
'world,'anyone
: r
'sasl,'kafka/server-02.eigenroute.com@EIGENROUTE.COM
: cdrwa
我觉得很奇怪...kafka/server-01.eigenroute.com@EIGENROUTE.COM
(代理 1 的 Kerberos 主体)不应该具有与 kafka/server-02.eigenroute.com@EIGENROUTE.COM
(代理 2 的 Kerberos 主体)相同的权限吗?
有人可以建议为什么制作人看不到它被授权写入的主题吗?
更新:以下是对@Vladimir Nabokov 提供的答案中的问题的回复:
我在任一代理节点上都没有看到分区主题:
kafka@server-02:/var/log/kafka$ ls -alhtr
总计124K
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:27 .lock
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:27 cleaner-offset-checkpoint
-rw-r--r-- 1 kafka kafka 54 1 月 7 23:27 meta.properties
drwxr-xr-x 7 root root 4.0K Jan 9 06:25 ..
drwxr-xr-x 2 kafka kafka 4.0K 1 月 18 日 05:30 __consumer_offsets-29
...
drwxr-xr-x 2 kafka kafka 4.0K 1 月 18 日 05:30 __consumer_offsets-1
-rw-r--r-- 1 kafka kafka 600 1 月 18 日 05:56 复制偏移检查点
-rw-r--r-- 1 kafka kafka 600 Jan 18 05:56 恢复点偏移检查点
-rw-r--r-- 1 kafka kafka 4 Jan 18 05:56 log-start-offset-checkpoint
drwxr-xr-x 27 kafka kafka 4.0K 1 月 18 日 05:56 .
和
kafka@server-01:/var/log/kafka$ ls -alhtr
total 124K
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:26 .lock
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:26 cleaner-offset-checkpoint
-rw-r--r-- 1 kafka kafka 54 Jan 7 23:26 meta.properties
drwxr-xr-x 7 root root 4.0K Jan 17 06:25 ..
drwxr-xr-x 2 kafka kafka 4.0K Jan 18 05:30 __consumer_offsets-0
...
drwxr-xr-x 2 kafka kafka 4.0K Jan 18 05:30 __consumer_offsets-32
-rw-r--r-- 1 kafka kafka 600 Jan 18 05:58 recovery-point-offset-checkpoint
-rw-r--r-- 1 kafka kafka 4 Jan 18 05:58 log-start-offset-checkpoint
-rw-r--r-- 1 kafka kafka 600 Jan 18 05:59 replication-offset-checkpoint
drwxr-xr-x 27 kafka kafka 4.0K Jan 18 05:59 .
用户 kafka
,即运行 kafka 服务器的用户,是两个代理上 /var/log/kafka/
目录的所有者:
kafka@server-02:~/kafka_2.11-1.0.0/confkafka@server-01:/var/log$ ll /var/log | grep卡夫卡
drwxr-xr-x 27 kafka kafka 4096 1 月 18 日 05:49 kafka
ig$ll /var/log | grep kafka
看起来 telnet 正在工作,两个经纪人:
sjamal->telnet 服务器-01.eigenroute.com9092
正在尝试 54.175.56.39...
连接到服务器-01.eigenroute.com。
转义符是'^]'。
^C连接被外部主机关闭。
[~/projects/microservices/kafka-tutorial/kafka_2.11-1.0.0]
sjamal-> telnet 服务器-02.eigenroute.com 9092
正在尝试 18.221.32.34...
连接到服务器-02.eigenroute.com。
转义符是'^]'。
^C连接被外部主机关闭。
不需要-他们可以看到对方:
kafka@server-02:~/kafka_2.11-1.0.0/config$ 主机服务器-01.eigenroute.com
服务器-01.eigenroute.com 的地址为 54.175.56.39
kafka@server-01:/var/log$ 主机服务器-02.eigenroute.com
服务器-02.eigenroute.com 的地址为 18.221.32.34
我试过了。消费者没有收到任何消息:
[2018-01-18 00:45:31,931] 警告 [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7022 的元数据时出错:{another-test-主题=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-01-18 00:45:32,063] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7024 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-01-18 00:45:32,194] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7025 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
[2018-01-18 00:45:32,327] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7026 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
drwxr-xr-x 27 kafka kafka 4096 1 月 18 日 05:44 kafka
抱歉格式错误 - 我粘贴了代码并点击了 'code' 按钮,但它没有格式化为代码,我不知道为什么。
更新 #2:为了回应 Vladimir Nabokov 在他的回答中的评论,我粘贴了我正在使用的生产者和消费者配置和命令:
// sasl-producer.properties
bootstrap.servers=server-01.eigenroute.com:9092
compression.type=none
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
useKeyTab=true \
storeKey=true \
keyTab="/path/to/producer1.whatever.keytab" \
principal="producer1/whatever@EIGENROUTE.COM";
// sasl-consumer.properties
bootstrap.servers=server-01.eigenroute.com:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
useKeyTab=true \
storeKey=true \
keyTab="/path/to/consumer1.whatever.keytab" \
principal="consumer1/whatever@EIGENROUTE.COM";
# producer command
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" bin/kafka-console-producer.sh --broker-list server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 --topic another-test-topic --producer.config config/sasl-producer.properties
# consumer command
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" bin/kafka-console-consumer.sh --bootstrap-server server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 --topic another-test-topic --consumer.config config/sasl-consumer.properties --from-beginning
这个错误:
WARN [Producer clientId=console-producer] Error while fetching
metadata with correlation id 1 :
{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION}
(org.apache.kafka.clients.NetworkClient)
不强制表示您没有写到主题。
只能说,这个题目是"a new"一个。
1) 检查,可能数据已经写到数据目录中了,可以直观的看到,cd data_dir/topic/partition,寻找增长的文件。 (查看所有分区中的两台服务器)
2) 检查,可能是 data_dir 没有为您的 kafka 用户写入的权限?
3) 从 produce 机器 'telnet kafka_host kafka_port' 检查,可能是 producer 在网络中没有看到你的 kafka 服务器
4) 在生产者和 kafka 代理上,输入 /etc/hosts 并将 IP 映射到所有 3 台机器的主机名。他们不仅需要知道彼此的 IP,还需要知道主机名到 IP 的映射(DNS 服务是一种替代方法)
5)
与消费者建立联系并尝试消费您的主题。
好吧,我不知道这是否可以作为答案,但它确实有效。解决方案是在 Broker 1 服务器(原始代理)而不是 Broker 2 服务器(第二个添加的代理)上创建新主题 ("a-test-topic2")。
现在,如果我将 Broker 1 下线,那么我可以在 Broker 2 服务器上创建一个主题 ("a-test-topic3") - 但是副本编号当然必须是一个,所以我不会能够在 Broker 1 上拥有任何副本(replicae?)。
接下来,我恢复 Broker 1,并尝试在副本数为 2 的 Broker 2 服务器上创建另一个主题 ("a-test-topic4"),并且...成功了!对于这个新主题的所有分区,Isr 是 2,1 或 1,2,leader 是 1 或 2。
嗯...让我们尝试在 Broker 1 服务器上创建一个主题 ("a-test-topic5")。发生什么了?
我遇到了我最初遇到的同样的问题。新主题分区没有领导者,也没有 Isr 。但我找到了解决此问题的方法 - 使用 Broker 1 运行,我停止了 Broker 2,然后再次启动了 Broker 2,瞧 - 对于所有分区,这个主题最终获得了 1 或 2 的 Leader 和 Isrs 1,2 或 2,1。
所以我想新主题只能在激活的第一个代理上创建,否则必须重新启动所有其他代理?
我有一个包含 2 个代理的 Kafka 集群,每个代理都在自己的 (AWS) 服务器上(我使用说明 here 设置集群)。我正在使用 SASL(但没有加密)。在运行代理 2 的服务器 2 上,我创建了一个主题:
KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf" \
bin/kafka-topics.sh --create \
--zookeeper zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo \
--replication-factor 2 --partitions 9 --topic another-test-topic
看似成功,因为描述主题表明它至少是创建的:
KAFKA_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Djava.security.krb5.conf=/etc/krb5.conf" \
bin/kafka-topics.sh --describe \
--zookeeper zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo
Topic:another-test-topic PartitionCount:9 ReplicationFactor:2 Configs: MarkedForDeletion:true
Topic: another-test-topic Partition: 0 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 1 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 2 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 3 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 4 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 5 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 6 Leader: none Replicas: 2,1 Isr:
Topic: another-test-topic Partition: 7 Leader: none Replicas: 1,2 Isr:
Topic: another-test-topic Partition: 8 Leader: none Replicas: 2,1 Isr:
如您所见,该主题没有分配领导者,也没有同步副本。我已将写入权限分配给生产者:
KAFKA_HEAP_OPTS="-Djava.security.auth.login.config=/home/kafka/kafka_2.11-1.0.0/config/jaas.conf -Dsun.security.krb5.debug=true -Djava.security.krb5.conf=/etc/krb5.conf -Xmx256M -Xms128M" \
bin/kafka-acls.sh --authorizer-properties \
zookeeper.connect=zookeeper-server-01.eigenroute.com:2181,zookeeper-server-02.eigenroute.com:2181,zookeeper-server-03.eigenroute.com:2181/apps/kafka-cluster-demo \
--add --allow-principal User:producer1 --producer --topic another-test-topic
...
Current ACLs for resource `Topic:another-test-topic`:
User:producer1 has Allow permission for operations: Describe from hosts: *
User:producer1 has Allow permission for operations: Write from hosts: *
但是,我的制作人无法写入此主题:
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" \
bin/kafka-console-producer.sh \
--broker-list server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 \
--topic another-test-topic --producer.config config/sasl-producer.properties
>this is a test message
[2018-01-07 21:16:02,650] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
此主题在 ZooKeeper 节点上的 ACL 是:
[zk: zookeeper-server-03.eigenroute.com:2181(CONNECTED) 8] getAcl /apps/kafka-cluster-demo/brokers/topics/another-test-topic
'world,'anyone
: r
'sasl,'kafka/server-02.eigenroute.com@EIGENROUTE.COM
: cdrwa
我觉得很奇怪...kafka/server-01.eigenroute.com@EIGENROUTE.COM
(代理 1 的 Kerberos 主体)不应该具有与 kafka/server-02.eigenroute.com@EIGENROUTE.COM
(代理 2 的 Kerberos 主体)相同的权限吗?
有人可以建议为什么制作人看不到它被授权写入的主题吗?
更新:以下是对@Vladimir Nabokov 提供的答案中的问题的回复:
我在任一代理节点上都没有看到分区主题:
kafka@server-02:/var/log/kafka$ ls -alhtr 总计124K -rw-r--r-- 1 kafka kafka 0 Jan 7 23:27 .lock -rw-r--r-- 1 kafka kafka 0 Jan 7 23:27 cleaner-offset-checkpoint -rw-r--r-- 1 kafka kafka 54 1 月 7 23:27 meta.properties drwxr-xr-x 7 root root 4.0K Jan 9 06:25 .. drwxr-xr-x 2 kafka kafka 4.0K 1 月 18 日 05:30 __consumer_offsets-29 ... drwxr-xr-x 2 kafka kafka 4.0K 1 月 18 日 05:30 __consumer_offsets-1 -rw-r--r-- 1 kafka kafka 600 1 月 18 日 05:56 复制偏移检查点 -rw-r--r-- 1 kafka kafka 600 Jan 18 05:56 恢复点偏移检查点 -rw-r--r-- 1 kafka kafka 4 Jan 18 05:56 log-start-offset-checkpoint drwxr-xr-x 27 kafka kafka 4.0K 1 月 18 日 05:56 .
和
kafka@server-01:/var/log/kafka$ ls -alhtr
total 124K
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:26 .lock
-rw-r--r-- 1 kafka kafka 0 Jan 7 23:26 cleaner-offset-checkpoint
-rw-r--r-- 1 kafka kafka 54 Jan 7 23:26 meta.properties
drwxr-xr-x 7 root root 4.0K Jan 17 06:25 ..
drwxr-xr-x 2 kafka kafka 4.0K Jan 18 05:30 __consumer_offsets-0
...
drwxr-xr-x 2 kafka kafka 4.0K Jan 18 05:30 __consumer_offsets-32
-rw-r--r-- 1 kafka kafka 600 Jan 18 05:58 recovery-point-offset-checkpoint
-rw-r--r-- 1 kafka kafka 4 Jan 18 05:58 log-start-offset-checkpoint
-rw-r--r-- 1 kafka kafka 600 Jan 18 05:59 replication-offset-checkpoint
drwxr-xr-x 27 kafka kafka 4.0K Jan 18 05:59 .
用户
kafka
,即运行 kafka 服务器的用户,是两个代理上/var/log/kafka/
目录的所有者:kafka@server-02:~/kafka_2.11-1.0.0/confkafka@server-01:/var/log$ ll /var/log | grep卡夫卡 drwxr-xr-x 27 kafka kafka 4096 1 月 18 日 05:49 kafka ig$ll /var/log | grep kafka
看起来 telnet 正在工作,两个经纪人:
sjamal->telnet 服务器-01.eigenroute.com9092 正在尝试 54.175.56.39... 连接到服务器-01.eigenroute.com。 转义符是'^]'。 ^C连接被外部主机关闭。 [~/projects/microservices/kafka-tutorial/kafka_2.11-1.0.0] sjamal-> telnet 服务器-02.eigenroute.com 9092 正在尝试 18.221.32.34... 连接到服务器-02.eigenroute.com。 转义符是'^]'。 ^C连接被外部主机关闭。
不需要-他们可以看到对方:
kafka@server-02:~/kafka_2.11-1.0.0/config$ 主机服务器-01.eigenroute.com 服务器-01.eigenroute.com 的地址为 54.175.56.39 kafka@server-01:/var/log$ 主机服务器-02.eigenroute.com 服务器-02.eigenroute.com 的地址为 18.221.32.34
我试过了。消费者没有收到任何消息:
[2018-01-18 00:45:31,931] 警告 [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7022 的元数据时出错:{another-test-主题=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2018-01-18 00:45:32,063] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7024 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2018-01-18 00:45:32,194] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7025 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient) [2018-01-18 00:45:32,327] WARN [Consumer clientId=consumer-1, groupId=console-consumer-95024] 获取相关 ID 为 7026 的元数据时出错:{another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
drwxr-xr-x 27 kafka kafka 4096 1 月 18 日 05:44 kafka
抱歉格式错误 - 我粘贴了代码并点击了 'code' 按钮,但它没有格式化为代码,我不知道为什么。
更新 #2:为了回应 Vladimir Nabokov 在他的回答中的评论,我粘贴了我正在使用的生产者和消费者配置和命令:
// sasl-producer.properties
bootstrap.servers=server-01.eigenroute.com:9092
compression.type=none
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
useKeyTab=true \
storeKey=true \
keyTab="/path/to/producer1.whatever.keytab" \
principal="producer1/whatever@EIGENROUTE.COM";
// sasl-consumer.properties
bootstrap.servers=server-01.eigenroute.com:9092
security.protocol=SASL_PLAINTEXT
sasl.mechanism=GSSAPI
sasl.kerberos.service.name=kafka
sasl.jaas.config=com.sun.security.auth.module.Krb5LoginModule required \
useKeyTab=true \
storeKey=true \
keyTab="/path/to/consumer1.whatever.keytab" \
principal="consumer1/whatever@EIGENROUTE.COM";
# producer command
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" bin/kafka-console-producer.sh --broker-list server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 --topic another-test-topic --producer.config config/sasl-producer.properties
# consumer command
KAFA_HEAP_OPTS="-Djava.security.krb5.conf=/etc/krb5.conf -Dsun.security.krb5.debug=true" bin/kafka-console-consumer.sh --bootstrap-server server-01.eigenroute.com:9092,server-02.eigenroute.com:9092 --topic another-test-topic --consumer.config config/sasl-consumer.properties --from-beginning
这个错误:
WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 1 : {another-test-topic=UNKNOWN_TOPIC_OR_PARTITION} (org.apache.kafka.clients.NetworkClient)
不强制表示您没有写到主题。
只能说,这个题目是"a new"一个。
1) 检查,可能数据已经写到数据目录中了,可以直观的看到,cd data_dir/topic/partition,寻找增长的文件。 (查看所有分区中的两台服务器)
2) 检查,可能是 data_dir 没有为您的 kafka 用户写入的权限?
3) 从 produce 机器 'telnet kafka_host kafka_port' 检查,可能是 producer 在网络中没有看到你的 kafka 服务器
4) 在生产者和 kafka 代理上,输入 /etc/hosts 并将 IP 映射到所有 3 台机器的主机名。他们不仅需要知道彼此的 IP,还需要知道主机名到 IP 的映射(DNS 服务是一种替代方法)
5) 与消费者建立联系并尝试消费您的主题。
好吧,我不知道这是否可以作为答案,但它确实有效。解决方案是在 Broker 1 服务器(原始代理)而不是 Broker 2 服务器(第二个添加的代理)上创建新主题 ("a-test-topic2")。
现在,如果我将 Broker 1 下线,那么我可以在 Broker 2 服务器上创建一个主题 ("a-test-topic3") - 但是副本编号当然必须是一个,所以我不会能够在 Broker 1 上拥有任何副本(replicae?)。
接下来,我恢复 Broker 1,并尝试在副本数为 2 的 Broker 2 服务器上创建另一个主题 ("a-test-topic4"),并且...成功了!对于这个新主题的所有分区,Isr 是 2,1 或 1,2,leader 是 1 或 2。
嗯...让我们尝试在 Broker 1 服务器上创建一个主题 ("a-test-topic5")。发生什么了? 我遇到了我最初遇到的同样的问题。新主题分区没有领导者,也没有 Isr 。但我找到了解决此问题的方法 - 使用 Broker 1 运行,我停止了 Broker 2,然后再次启动了 Broker 2,瞧 - 对于所有分区,这个主题最终获得了 1 或 2 的 Leader 和 Isrs 1,2 或 2,1。
所以我想新主题只能在激活的第一个代理上创建,否则必须重新启动所有其他代理?