【问题标题】:kafka connect exception, Replication factor: 3 larger than available brokers: 1kafka 连接异常,复制因子:3 大于可用代理:1
【发布时间】:2020-10-12 22:34:00
【问题描述】:

kafka 连接 5.4 只有一个连接器,一个工人,并使用连接分布式。

以下是错误信息:

[2020-06-22 19:09:58,700] ERROR [Worker clientId=connect-1, groupId=test-cluster] 
Uncaught exception in herder work thread, exiting:  (org.apache.kafka.connect.runtime.distributed.DistributedHerder:290)
org.apache.kafka.connect.errors.ConnectException: Error while attempting to create/find topic(s) 'test-connect-offsets'
    at org.apache.kafka.connect.util.TopicAdmin.createTopics(TopicAdmin.java:262)
    at org.apache.kafka.connect.storage.KafkaOffsetBackingStore$1.run(KafkaOffsetBackingStore.java:99)
    at org.apache.kafka.connect.util.KafkaBasedLog.start(KafkaBasedLog.java:128)
    at org.apache.kafka.connect.storage.KafkaOffsetBackingStore.start(KafkaOffsetBackingStore.java:109)
    at org.apache.kafka.connect.runtime.Worker.start(Worker.java:186)
    at org.apache.kafka.connect.runtime.AbstractHerder.startServices(AbstractHerder.java:121)
    at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:277)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.util.concurrent.ExecutionException: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.
    at org.apache.kafka.common.internals.KafkaFutureImpl.wrapAndThrow(KafkaFutureImpl.java:45)
    at org.apache.kafka.common.internals.KafkaFutureImpl.access$000(KafkaFutureImpl.java:32)
    at org.apache.kafka.common.internals.KafkaFutureImpl$SingleWaiter.await(KafkaFutureImpl.java:89)
    at org.apache.kafka.common.internals.KafkaFutureImpl.get(KafkaFutureImpl.java:260)
    at org.apache.kafka.connect.util.TopicAdmin.createTopics(TopicAdmin.java:229)
    ... 11 more
Caused by: org.apache.kafka.common.errors.InvalidReplicationFactorException: Replication factor: 3 larger than available brokers: 1.

【问题讨论】:

    标签: apache-kafka apache-kafka-connect


    【解决方案1】:

    添加到 config.properties 之后就可以了

    offsets.topic.replication.factor=1
    config.storage.replication.factor=1
    offset.storage.replication.factor=1
    status.storage.replication.factor=1
    transaction.state.log.replication.factor=1
    transaction.state.log.min.isr=1
    

    【讨论】:

    • 您已找到答案,但您列出的其他配置选项不适用,并且会误导人们发现此问题。
    【解决方案2】:

    为了让 Kafka Connect 在分布式模式下运行,它使用了三个主题,这些主题存储在 Kafka 集群上并保存有关配置等信息。您需要在 Kafka Connect 工作器属性中进行设置:

    config.storage.replication.factor=1
    offset.storage.replication.factor=1
    status.storage.replication.factor=1
    

    如果你使用的是 Docker 镜像,那么你需要设置环境变量来覆盖这些,在 Docker Compose 中是这样的:

    CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1"
    CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1"
    CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1"
    

    参考:Configuring Kafka Connect distributed workers

    【讨论】:

    • 默认值 3 在 Docker 容器中是哑的。大多数人会先让一台服务器工作,然后再扩大规模。
    • 把它翻过来,有人拿起那个容器供生产使用会说默认将它设置为 1 是“愚蠢的”?‍♂️ :-D
    • 你从爬行开始,然后走路,然后跑步。默认情况下,您不会从最复杂的配置开始。如果您打算开始(每个人在某些时候都是新人),那么您希望通过合理的默认设置来轻松。如果您是决定扩大规模的较小群体,那么您可能不会感到惊讶,您需要设置一个使用更高复制因子的配置。融合容器迫使用户理解的方式比他们应该提前开始的方式更多。不像 debezium 容器,例如
    猜你喜欢
    • 1970-01-01
    • 2019-06-01
    • 2016-01-10
    • 2015-03-22
    • 1970-01-01
    • 2023-01-30
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多