卡夫卡经纪人对随机分区不同步

时间:2018-08-08 11:32:42

标签: apache-kafka

我设置了4个Kafka经纪人。在我的设置中,每个主题中的每个分区的复制因子均为2。所有分区都是平衡的-领导者和关注者的分布均匀

此设置已运行6个月以上

通过Kafka Manager监视设置时,我发现8%的分区复制不足。

所有这些分区都分配给同一组副本。并且分配给这组副本的每个分区都显示为复制不足

让我们将此代理集称为[1,2]-代理1和2。所有这些分区的ISR现在为[1]。

代理1和2都已启动并正在运行。所有其他分区的ISR计数均符合预期。

脚本bin/kafka-topics.sh还显示有8%的分区需要复制。

但是jolokia指标-UnderReplicatedPartitions-为0

我需要帮助回答-

  1. 有问题吗?
  2. 为什么jolokia指标和kafka控制台不一致?
  3. 如何解决此问题?

2 个答案:

答案 0 :(得分:0)

您对此有任何解决方案。我们即将在生产中实现Kafka,并且在经过一系列成功的严格测试之后的一天,我突然看到许多__consumer_offsets主题分区只有一个ISR。我已将默认复制因子设置为4,并将min.insync.replica设置为2。

现在,当我的使用者程序尝试订阅任何主题时,都会出现此错误。

2018-08-14 14:27:25.519+0200 ERROR ReplicaFetcherThread-0-1002 [kafka.server.ReplicaFetcherThread(error:76)] [ReplicaFetcher replicaId=1003, leaderId=1002, fetcherId=0] Error for partition sampleTopicName-0 at offset 101152985
org.apache.kafka.common.errors.UnknownTopicOrPartitionException: This server does not host this topic-partition.
2018-08-14 14:27:25.587+0200 INFO  ReplicaFetcherThread-0-1004 [apache.kafka.clients.FetchSessionHandler(handleError:440)] [ReplicaFetcher replicaId=1003, leaderId=1004, fetcherId=0] Error sending fetch request (sessionId=1400970036, epoch=INITIAL) to node 1004: java.net.SocketTimeoutException: Failed to connect within 30000 ms.
2018-08-14 14:27:25.588+0200 WARN  ReplicaFetcherThread-0-1004 [kafka.server.ReplicaFetcherThread(warn:72)] [ReplicaFetcher replicaId=1003, leaderId=1004, fetcherId=0] Error in response for fetch request (type=FetchRequest, replicaId=1003, maxWait=500, minBytes=1, maxBytes=10485760, fetchData={__consumer_offsets-0=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-28=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-4=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-32=(offset=101770, logStartOffset=0, maxBytes=1048576), __consumer_offsets-8=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-16=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-36=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-44=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-12=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-20=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-40=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-48=(offset=0, logStartOffset=0, maxBytes=1048576), __consumer_offsets-24=(offset=0, logStartOffset=0, maxBytes=1048576)}, isolationLevel=READ_UNCOMMITTED, toForget=, metadata=(sessionId=1400970036, epoch=INITIAL))
java.net.SocketTimeoutException: Failed to connect within 30000 ms
        at kafka.server.ReplicaFetcherBlockingSend.sendRequest(ReplicaFetcherBlockingSend.scala:92)
        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)

任何解决此问题的方法将不胜感激。到目前为止,我们已经尝试过重新启动经纪人和动物园管理员而没有运气。

答案 1 :(得分:0)

关于“ jolokia量度”我什么也不能说,但是我们经历了同样的事情,因为我们有一个“慢速”经纪人,在复制数据方面落后。

“慢”表示复制请求某些内容违反了代理范围的配置replica.lag.time.max.ms,该配置默认为10秒,并描述为:

“如果追随者至少这次没有发送任何获取请求或没有消耗领导者日志结束偏移量,则领导者将从isr中删除跟随者”

稍微增加此配置可以为我们解决问题。