当前位置: 首页 > 知识库问答 >
问题:

多代理、多服务器群集中的Kafka producer无法写入新创建的主题

毕泽宇
2023-03-14

我有一个带有两个代理的Kafka集群,每个代理都在自己的(AWS)服务器上(我使用这里的intstructions设置集群)。我正在使用SASL(但没有加密)。在运行Broker2的服务器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)
[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

有人能建议一下,制作人为什么看不到它被授权写作的题目?

更新:以下是@Vladimir Nabokov提供的答案中的问题的回复:

>

  • 我在两个代理的节点上都看不到分区主题:

    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:~/kafka2.11-1.0.0/confkafka@server-01:/var/log$ll/var/log grepKafkadrwxr-xr-x 27KafkaKafka4096 Jan 18 05:49Kafkaig$ll/var/log grepKafka

    对两个代理来说,telnet似乎都起作用了:

    Sjamal->telnet Server-01.eigenroute.com 9092尝试54.175.56.39...已连接到server-01.eigenroute.com。转义字符为“^]”。^C连接被外部主机关闭。[~/Projects/MicroServices/kafka-tutorial/kafka2.11-1.0.0]Sjamal->telnet Server-02.eigenroute.com 9092尝试18.221.32.34...连接到Server-02.eigenroute.com。转义字符为“^]”。^C连接被外部主机关闭。

    不是必须的--他们可以看到对方:

    kafka@server-02:~/kafka2.11-1.0.0/config$host server-01.eigenroute.com server-01.eigenroute.com具有地址54.175.56.39 kafka@server-01:/var/log$host server-02.eigenroute.com server-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-topic=unknown_topic_or_partition}(org.apache.kafka.clients.networkClient)[2018-01-18 00:45:32,063]警告[Consumer-client=Console-consumer-95024]提取相关id为7024的元数据时出错:{another-test-topic=unknown_topic_or_partition}(

    drwxr-xr-x 27 kafka kafka 4096 Jan 18 05:44 kafka

    抱歉的错误格式-我已经粘贴了代码,并按了‘代码’按钮,但它不是格式化为代码,我不知道为什么。

    更新#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
    
  • 共有1个答案

    殷永嘉
    2023-03-14

    此错误:

    警告[Producer ClientId=Console-Producer]获取相关id为1的元数据时出错:{another-test-topic=unknown_topic_or_partition}(org.apache.kafka.clients.NetworkClient)

    并不意味着你没有写到主题。

    它只意味着,这个话题是“一个新的”话题。

    1)检查,可能是数据已写入数据目录,可以直观地看到,cd data_dir/topic/partition,查找增长的文件。(查看所有分区中的两个服务器

    2)检查,可能是data_dir没有为您的kafka用户写的权限?

    4)在producer和kafka brokers上,输入/etc/hosts并将IP映射到所有3台机器的主机名。它们不仅需要知道彼此的IP,而且需要知道主机名到IP的映射(DNS服务是一种替代方案)

    5)与消费者联系,尝试消费你话题。

     类似资料:
    • 本教程用于多代理kafka集群。我建立了三个经纪人: 本地主机:9092 本地主机:9093 本地主机:9094 问题是,如果我杀死,我就不能使用以下命令: 我知道端口被杀死了,但是--如何通过通用引导服务器来使它运行?我错过了什么? 编辑1: bin/kafka-console-consumer.sh--bootstrap-server localhost:9092,localhost:9093

    • 2.4 多服务&多监听 2.4.1 在Go代码中声明 假定用户需要创建的Web服务 服务名称 版本号 监听地址 网络类型 读取请求数据超时 写入响应数据超时 myapp1 1.0 0.0.0.0:8080、0.0.0.0:4430 http、https(TLS) 0 0 myapp2 2.0 0.0.0.0:8081、0.0.0.0:4431 http、https(TLS) 0 0 无版本号的服务

    • 你好,我有错误,如java.lang.NullPointerException上OutputStream out=ftp.storeFileStream(路径);. 你能帮帮我吗?代码编写了第一个图像,并完全停止了编写。这是我的方法代码。。。。。。。。 我将发布两个单独的代码。事实上这是一种方法。 这是NPE错误! java.lang.NullPointerException atcom.scm.

    • 问题内容: 我想为一个聊天室应用程序创建一个node.js服务器集群,以支持高并发性。我需要能够在所有节点之间共享信息。我试图找出使所有服务器保持同步的最佳方法。我希望在共享对象中具有尽可能大的灵活性,因为我计划在将来添加更多功能。 到目前为止,我想到了两种解决方案: 订阅NoSQL密钥(例如redis publish-subscribe) 节点使用套接字彼此更新。 哪个更好?还有其他想法吗? 问

    • 我知道这个问题以前被问过多次,但没有一个解决方案对我有帮助。 3个月前,我成功地做到了这一点,但现在我陷入了困境,没有改变任何让我困惑的事情,我真的不知道该怎么办! 1:基本信息:win 7 Rselenium standalone 3.13.0(试用过3.9.1,但不起作用,三个月前就开始工作了)chrome版本v64。0.3282.140(32位)chromedriver 2.37应兼容。(还

    • 我有一个在多VM环境中运行的Kafka代理(私有云-带有我们自己的库伯内特斯集群-4节点集群)。 我创建了一个spring-boot应用程序,它有一个发布者,必须在Kafka代理中向Kafka主题发布消息。我有两个集装箱(Kafka经纪人 我无法通过在发布者的bootstrap.servers中提供Kafka的服务名称:端口ID来访问Kafka代理(在同一个k8s集群中运行) Spring boo