kafka connect在分布式模式下返回409

7bsow1i6  于 2021-06-07  发布在  Kafka
关注(0)|答案(3)|浏览(488)

我正在运行kafka connect分布式安装程序。
我使用单机/进程设置(仍处于分布式模式)进行测试,工作正常,现在我使用3个节点(和3个连接进程),日志不包含错误,但当我通过rest api提交s3连接器请求时,它返回: {"error_code":409,"message":"Cannot complete request because of a conflicting operation (e.g. worker rebalance)"} .
当我在其中一个节点上停止kafka connect进程时,我实际上可以提交作业,一切都正常运行。
我的集群中有3个代理,主题的分区号是32。
这是我要启动的连接器:

{
    "name": "s3-sink-new-2",
    "config": {
        "connector.class": "io.confluent.connect.s3.S3SinkConnector",
        "tasks.max": "32",
        "topics": "rawEventsWithoutAttribution5",
        "s3.region": "us-east-1",
        "s3.bucket.name": "dy-raw-collection",
        "s3.part.size": "64000000",
        "flush.size": "10000",
        "storage.class": "io.confluent.connect.s3.storage.S3Storage",
        "format.class": "io.confluent.connect.s3.format.avro.AvroFormat",
        "schema.generator.class": "io.confluent.connect.storage.hive.schema.DefaultSchemaGenerator",
        "partitioner.class": "io.confluent.connect.storage.partitioner.TimeBasedPartitioner",
        "partition.duration.ms": "60000",
        "path.format": "\'year\'=YYYY/\'month\'=MM/\'day\'=dd/\'hour\'=HH",
        "locale": "US",
        "timezone": "GMT",
        "timestamp.extractor": "RecordField",
        "timestamp.field": "procTimestamp",
        "name": "s3-sink-new-2"
    }
}

日志上没有任何问题,我真的很迷茫。

6yjfywim

6yjfywim1#

与@omrimanor相同,在我的例子中,这是一个节点的问题,导致了一个重新平衡循环。我所做的是暂停连接器,然后停止所有节点接受一个,然后我可以删除连接器,因为单个节点不会导致重新平衡循环。

8ulbf1ek

8ulbf1ek2#

正如wojciech sznapka所说, CONNECT_REST_ADVERTISED_HOST_NAME ( rest.advertised.host.name 如果你不使用docker)是这里的问题。它不仅需要设置为唯一的值,还需要设置工作进程的正确主机名,并且可以从其他工作进程中解析。 rest.advertised.host.name 由kafka connect用于确定如何联系其他工人-例如,如果工人不是领导,则需要将休息请求转发给工人。如果这个配置没有正确设置,那么问题就会接踵而至。
如果你有一群工人,你关闭了所有的,但只有一个突然的事情工作,这是因为关闭了其他人,你保证了剩下的工人是领导,因此不必转发的请求。
有关详细信息,请参阅https://rmoff.net/2019/11/22/common-mistakes-made-when-configuring-multiple-kafka-connect-workers/

cwtwac6a

cwtwac6a3#

我在kubernetes上的设置也有同样的问题。问题是我 CONNECT_REST_ADVERTISED_HOST_NAME 在16个节点中的每个节点上设置为相同的值。它引起了不断的再平衡问题。有独特的价值,你应该很好。
k8s的解决方案对我很有效:

- env:
  - name: CONNECT_REST_ADVERTISED_HOST_NAME
    valueFrom:
      fieldRef:
        fieldPath: status.podIP

相关问题