kafka 连接异常,复制因子:3 比可用代理大:1

ali*_*uya 3 apache-kafka apache-kafka-connect

kafka connect 5.4 只有一个连接器,一个工人,并使用 connect-distributed。

下面是错误信息:

[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.
Run Code Online (Sandbox Code Playgroud)

Rob*_*att 8

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

config.storage.replication.factor=1
offset.storage.replication.factor=1
status.storage.replication.factor=1
Run Code Online (Sandbox Code Playgroud)

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

CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: "1"
CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: "1"
CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: "1"
Run Code Online (Sandbox Code Playgroud)

参考:配置 Kafka Connect 分布式工作者

  • 将其翻转过来,有人拿起该容器用于生产时会说默认将其设置为 1 是“愚蠢的”‍♂️ :-D (3认同)
  • 默认值 3 在 Docker 容器中是愚蠢的。大多数人会首先让一台服务器工作,然后再扩展。 (2认同)
  • 你从爬行开始,然后步行,然后跑步。默认情况下,您不会从最复杂的配置开始。如果您打算开始(每个人在某个时候都是新人),那么您希望通过合理的默认设置来轻松实现。如果您属于决定扩大规模的一小群人,那么您可能不会感到惊讶,因为您需要设置一个使用更高复制因子的配置。合流容器迫使用户了解比开始时应该了解的更多内容。例如,与 Debezium 容器不同 (2认同)

ali*_*uya -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
Run Code Online (Sandbox Code Playgroud)