Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka docker compose中的卡夫卡:主题不在broker的首选副本中_Apache Kafka_Kafka Consumer Api - Fatal编程技术网

Apache kafka docker compose中的卡夫卡:主题不在broker的首选副本中

Apache kafka docker compose中的卡夫卡:主题不在broker的首选副本中,apache-kafka,kafka-consumer-api,Apache Kafka,Kafka Consumer Api,我正在运行一个测试kafka“集群”,它由docker compose中的一个kafka代理和一个Zookeeper节点组成,使用以下(官方)docker compose.yml: --- version: '2' services: zookeeper: image: confluentinc/cp-zookeeper:6.0.0 hostname: zookeeper container_name: zoo

我正在运行一个测试kafka“集群”,它由docker compose中的一个kafka代理和一个Zookeeper节点组成,使用以下(官方)
docker compose.yml

---
    version: '2'
    
    services:
      zookeeper:
        image: confluentinc/cp-zookeeper:6.0.0
        hostname: zookeeper
        container_name: zookeeper
        ports:
          - "2181:2181"
        environment:
          ZOOKEEPER_CLIENT_PORT: 2181
          ZOOKEEPER_TICK_TIME: 2000
    
      broker:
        image: confluentinc/cp-kafka:6.0.0
        hostname: broker
        container_name: broker
        depends_on:
          - zookeeper
        ports:
          - "29092:29092"
        environment:
          KAFKA_BROKER_ID: 101
          KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,PLAINTEXT_HOST://localhost:29092
          KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
          KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
          KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
          KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
使用
docker compose up启动此“集群”后,我使用console命令成功创建了一个主题:

docker exec broker kafka主题--创建--主题myTopic--引导服务器本地主机:29092--复制因子1--分区1

并使用Golang producer以编程方式创建消息,同时使用console客户端收听消息:

docker exec broker kafka控制台使用者--从一开始--引导服务器本地主机:29092--主题myTopic--超时ms 15000

每隔一段时间,控制台使用者和Golang编程制作人都会挂起并停止与kafka的连接。当我查看Kafka broker的日志以找出问题所在时,我看到一堵墙重复着关于主题不在首选副本中的以下结构的消息:

broker       | [2021-05-09 06:08:50,144] INFO [Controller id=101] Processing automatic preferred replica leader election (kafka.controller.KafkaController)
broker       | [2021-05-09 06:08:50,149] TRACE [Controller id=101] Checking need to trigger auto leader balancing (kafka.controller.KafkaController)
broker       | [2021-05-09 06:08:50,165] DEBUG [Controller id=101] Topics not in preferred replica for broker 101 HashMap() (kafka.controller.KafkaController)
broker       | [2021-05-09 06:08:50,166] TRACE [Controller id=101] Leader imbalance ratio for broker 101 is 0.0 (kafka.controller.KafkaController)

你能解释一下,怎么了?如果只有一个分区和一个代理,如何分配错误的复制副本?

我不认为这一小部分日志是您的问题

那些日志说没有主题不在首选副本集中。。。它正在打印一个空的Hashmap


类似地,不平衡比率为零,因此集群是完全平衡的

因为您正在执行代理,所以您可以使用
kafka:9092
作为连接字符串,但为什么启用了跟踪日志?@OneCricketeer Hi,感谢您的评论和回复。未在
server.properties
中修改日志级别。显然,这是默认值。我认为9092和29092都是允许的。您应该只在Docker网络之外使用
localhost:29092
,特别是在代码从Docker主机连接的情况下。这就是为什么它被命名为
纯文本\u主机
。。。更具体地说,如果您的Go代码位于自己的容器中,那么使用该地址将尝试连接到自身,而不是broker@OneCricketeer好的,谢谢你指出这一点。