我有一个运行在单个节点上的Kafka服务器。只有一个节点,因为它是一个测试服务器。但即使对于测试服务器,我也需要确保在升级过程中不会发生数据丢失。
我将Kafka升级为:
- 停止Kafka、Zookeeper、Kafka Connect和Schema Registry
- 升级所有组件
- 启动升级的服务
在kafka未运行的第一步中可能会发生数据丢失。我想你可以用多个代理进行滚动更新(?(以防止数据丢失,但在我的情况下,这是不可能的。我怎么能用一个经纪人做类似的事情?有可能吗?如果没有,升级的最佳方法是什么?
我不得不说,很明显,如果只使用一个节点,您总是容易受到数据丢失的影响。
如果你不能有更多的节点,你只有选择:
- 停止生产
- 停止消费
- 启用参数
controlled.shutdown.enable
-这将确保您的broker在关闭时保存偏移量
我想前两个步骤相当棘手
不幸的是,没有太多可玩的东西——Kafka并没有被设计为只容错一个节点。
对于单个代理,滚动升级的过程仍然相同。
升级过程中的现有数据不应丢失。
显然,如果生产者仍在运行,那么在代理关闭时,他们的所有请求都将被拒绝,这就是为什么你不仅需要多个代理来防止数据丢失,还需要一个平衡的集群(禁用了不干净的领导者选举(,在这个集群中,你的重启周期不会完全使一组主题离线。