在我的群里有4个 Brokers
托管在4台服务器上;每台服务器都有一个 Kafka Broker
和一个 Zookeeper daemon
. 代理共享此配置:
num of partitions: 8
replication factor: 4
log segment bytes 1,07GB
在server2和server4(broker 2和4)上,24小时后的日志大小为18 gb。这是个问题。在日志中,我们可以看到此类警告消息,不断重复:
WARN Received a PartitionLeaderEpoch assignment for an epoch < latestEpoch.
This implies messages ave arrived out of order. New: {epoch:46, offset:7902727725},
CurrentL {epoch:147, 78884395360} for Partition: topic.
WARN Received a PartitionLeaderEpoch assignment for an epoch < latestEpoch.
This implies messages ave arrived out of order. New: {epoch:46, offset:7902727726},
CurrentL {epoch:147, 78884395360} for Partition: topic.
我还注意到偏移量是每行递增的。
这里有什么问题?
编辑:
分区重新分配不幸没有效果
抱歉,可能是我的错:我们有5个zookeeper节点,因为它是在图片上,但我不知道Kafka管理器总是只显示活动节点或全部?
我们只剩下更新了,但我会稍后再尝试(现在不行),我要说的是结果
编辑2:
我尝试重新分配分区,但它已完成(有时状态仅在挂起时停止)其他屏幕:
设置呢?
1条答案
按热度按时间xqk2d5yq1#
首先,移除其中一个
Zookeeper
法定人数:人数必须是奇数,以保证所作决定的多数:同一应用程序中的复制服务器组称为仲裁。zookeeper使用多数票,这意味着每次投票都需要多数票才能投票。
想象一下新领导人的投票:
ZK1
以及ZK2
投票给“特朗普”,而ZK3
以及ZK4
投“哈里斯”一票。结果是平局:没有多数,所以没有决断。坎耶·韦斯特当选总统。通常的数量
Zookeeper
群集中的守护程序是1,3,5,7
. 对于您的具体情况,3应该是好的。在damianos17的评论之后编辑:zk编号是5,而不是4。因此,上述文本不影响本问题;5完全有效,坎耶应该当选
关于你的问题,它似乎与这个错误有关。大日志问题只是kafka集群中的一个问题的结果。
正如其他用户评论的那样,这个错误会导致垃圾邮件发送千兆字节的警告日志消息,就像您作为示例发布的那些消息一样。结果,你得到了那些18gb的日志文件,没有一个有健康头脑的人会尝试去阅读。
这是因为
assign
中的操作LeaderEpochFileCache
类将调用validateAndMaybeWarn
如果时代不一致的话。这种方法是伴随着一种猖獗的囤积行为而产生的。如果无法进行验证,它将在每次调用时记录警告。
另一方面,由于高水位线截断,您还可能注意到集群上的数据丢失。这只是一种可能性,在你的情况下可能不会发生。
Kafka的一位作者的评论肯定了主要错误(导致创建大日志的错误)应该在这次更新中得到解决。
作为一种解决方法,我发现一些信息(csdn,stackoverflow)表明分区重新分配可以解决您的问题。
下面的文字是从一个作者是个混蛋的前一个答案抄来的
分区重新分配
你可以用Kafka的
kafka-reassign-partitions.sh
生成重新分配。Kafka文件中规定的方法遵循以下逻辑:
生成建议的分区重新分配配置
首先,您应该创建一个json文件,比如链接中提供的。我们来命名吧
topics.json
.这将告诉Kafka你愿意从哪些主题重新定位分区。在这个例子中,他希望Kafka提出一个主题的建议
foo1
以及foo2
.使用该json,调用工具并在命令中设置活动代理列表:
这将输出kafka的建议,您可以将其保存到另一个.json文件中。例如:
如果您愿意,您可以手动修改一些作业(或者认为这是正确的想法,因为该工具并不完美)。将json保存到一个文件中,例如,
reassign-example.json
,将在下一步中使用。执行建议的分区重新分配
让Kafka执行提议,移动分区。为此,请执行:
在简历中,我建议:
将zk的数量减少到3。
重新分配分区。
如果上一步不起作用,请更新到
Kafka
包含此更新的版本。请注意,重新分配可能只是一个暂时的修复,并且问题有可能在将来再次发生。