在使用单个代理升级Kafka时防止数据丢失



我有一个运行在单个节点上的Kafka服务器。只有一个节点,因为它是一个测试服务器。但即使对于测试服务器,我也需要确保在升级过程中不会发生数据丢失。

我将Kafka升级为:

  1. 停止Kafka、Zookeeper、Kafka Connect和Schema Registry
  2. 升级所有组件
  3. 启动升级的服务

在kafka未运行的第一步中可能会发生数据丢失。我想你可以用多个代理进行滚动更新(?(以防止数据丢失,但在我的情况下,这是不可能的。我怎么能用一个经纪人做类似的事情?有可能吗?如果没有,升级的最佳方法是什么?

我不得不说,很明显,如果只使用一个节点,您总是容易受到数据丢失的影响。

如果你不能有更多的节点,你只有选择:

  1. 停止生产
  2. 停止消费
  3. 启用参数controlled.shutdown.enable-这将确保您的broker在关闭时保存偏移量
    我想前两个步骤相当棘手

不幸的是,没有太多可玩的东西——Kafka并没有被设计为只容错一个节点。

对于单个代理,滚动升级的过程仍然相同。

升级过程中的现有数据不应丢失。

显然,如果生产者仍在运行,那么在代理关闭时,他们的所有请求都将被拒绝,这就是为什么你不仅需要多个代理来防止数据丢失,还需要一个平衡的集群(禁用了不干净的领导者选举(,在这个集群中,你的重启周期不会完全使一组主题离线。

最新更新