需要策略以在Kafka滚动重启时保留分区领导者

时间:2019-03-01 18:04:03

标签: docker apache-kafka

我有一个kafka集群,其中代理人是由游牧协调者作为容器分发到数据节点的。

每当我尝试运行容器或将exec执行到容器中时,都会收到如下错误:

root@ip-172-25-1-58:~# docker exec -it 4188ccb7f4a5 bash
rpc error: code = 5 desc = open /var/run/docker/libcontainerd/containerd/4188ccb7f4a5b45eec4d3254ad31db5308ad016982d8595acfe2d1b92f017f2f/0dab278911acc60fb7af41b6e0d8377194785b2853b3ca6da7a2bcf030110522/shim-log.json: no such file or directory

这似乎是一个常见问题,并最终在每个群集节点上发生。在非数据节点上重新启动dockerd很简单,因为除了一些短暂的中断之外,没有任何其他后果。

但是,我担心在我的每个数据节点上(一次一个)这样做会导致Kafka分区负责人被搞砸。

避免,解决或减轻此问题的想法将不胜感激。理想情况下,我希望保持Kafka集群的状态,但也对不满足此要求的解决方案感兴趣。

如果是否有一种方法可以使docker在不重新启动容器的情况下自行修复,也非常感兴趣。

Kafka容器基于confluentinc / cp-kafka:4.1.1

root@ip-172-25-1-58:~# docker version
Client:
 Version:           18.06.1-ce
 API version:       1.27 (downgraded from 1.38)
 Go version:        go1.10.4
 Git commit:        e68fc7a
 Built:             Fri Jan 25 14:33:54 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          17.03.2-ce
  API version:      1.27 (minimum version 1.12)
  Go version:       go1.6.2
  Git commit:       f5ec1e2
  Built:            Thu Jul  5 23:07:48 2018
  OS/Arch:          linux/amd64
  Experimental:     false

1 个答案:

答案 0 :(得分:1)

Kafka很好地处理了滚动重启。

在创建时,Kafka还将尝试在整个集群中尽可能多地分布领导者,以确保“领导者平衡”。最初的领导者经纪人也将成为首选的领导者。

默认情况下,卡夫卡将在可能的情况下尝试选举首选领导人。

因此,如果在滚动集群时进行滚动,则领导者可能无法达到理想的平衡,但是一旦滚动完成,Kafka应该重新选举首选的领导者,并且集群应返回到平衡状态。