卡夫卡:分区重新分配未发生

时间:2019-09-13 10:23:10

标签: apache-kafka

在Kafka经纪人之间迁移数据时遇到错误。

我正在使用kafka-ressignment工具将分区重新分配给其他代理,而没有任何限制(因为它不适用于以下命令)。大约有400个分区,包含50个主题。

Apache Kafka 1.1.0
Confluent Docker Image tag : 4.1.0

命令:

kafka-reassign-partitions --zookeeper IP:2181  --reassignment-json-file proposed.json --execute —throttle 100000000

一段时间后,我可以在目标代理上连续看到以下错误。

[2019-09-21 11:24:07,625] INFO [ReplicaFetcher replicaId=4, leaderId=0, fetcherId=0] Error sending fetch request (sessionId=514675011, epoch=INITIAL) to node 0: java.io.IOException: Connection to 0 was disconnected before the response was read. (org.apache.kafka.clients.FetchSessionHandler)

[2019-09-21 11:24:07,626] WARN [ReplicaFetcher replicaId=4, leaderId=0, fetcherId=0] Error in response for fetch request (type=FetchRequest, replicaId=4, maxWait=500, minBytes=1, maxBytes=10485760, fetchData={TOPIC-4=(offset=4624271, logStartOffset=4624271, maxBytes=104
8576), TOPIC-2=(offset=1704819, logStartOffset=1704819, maxBytes=1048576), TOPIC-8=(offset=990485, logStartOffset=990485, maxBytes=1048576), TOPIC-1=(offset=1696764, logStartOffset=1696764, maxBytes=1048576), TOPIC-7=(offset=991507, logStartOffset=991507, maxBytes=10485
76), TOPIC-5=(offset=988660, logStartOffset=988660, maxBytes=1048576)}, isolationLevel=READ_UNCOMMITTED, toForget=, metadata=(sessionId=514675011, epoch=INITIAL)) (kafka.server.ReplicaFetcherThread)

java.io.IOException: Connection to 0 was disconnected before the response was read
    at org.apache.kafka.clients.NetworkClientUtils.sendAndReceive(NetworkClientUtils.java:97)
    at kafka.server.ReplicaFetcherBlockingSend.sendRequest(ReplicaFetcherBlockingSend.scala:96)
    at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:220)
    at kafka.server.ReplicaFetcherThread.fetch(ReplicaFetcherThread.scala:43)
    at kafka.server.AbstractFetcherThread.processFetchRequest(AbstractFetcherThread.scala:146)
    at kafka.server.AbstractFetcherThread.doWork(AbstractFetcherThread.scala:111)
    at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:82)

动物园管理员状态:

 ls /admin/reassign_partitions
[]

我正在使用具有120GB大小的t2.medium型EC2实例和gp2型EBS卷。

我能够从所有经纪人处连接到动物园管理员。

[zk: localhost:2181(CONNECTED) 3] ls /brokers/ids [0, 1, 2, 3]

我为所有代理使用IP地址,因此DNS也不匹配。

此外,我看不到任何计划在Zookeeper中重新分配的主题。

[zk: localhost:2181(CONNECTED) 2] ls /admin/reassign_partitions
[]

有趣的是,我可以看到上面未列出的分区的数据正在堆积。但是错误中列出的分区目前尚未迁移。

我正在使用融合的kafka docker映像。

Kafka经纪人设置: https://gist.github.com/ethicalmohit/cd44f580356ca02250760a307d90b54d

2 个答案:

答案 0 :(得分:0)

如果您可以为我们提供有关拓扑的更多详细信息,也许我们可以更好地理解问题。

一些想法: -您可以通过zookeeper-cli在kafka-0:2181进行连接吗? kafka-0解析为正确的主机? -如果正在进行重新分配,则必须通过删除zookeeper中的相应密钥来手动停止此操作(警告,这可能会使某些主题或分区损坏),或者您必须等待此作业完成。您可以监视正在进行的重新分配并提供有关此信息吗?

答案 1 :(得分:0)

已通过提高所有目标代理中的replica.socket.receive.buffer.bytes的值来解决此问题。

更改以上参数并重新启动代理之后。我能够看到上述分区中的数据。