【问题标题】:Setting up Kafka HA with MirrorMaker - how to handle that in Flink?使用 MirrorMaker 设置 Kafka HA - 如何在 Flink 中处理?
【发布时间】:2020-07-05 01:40:18
【问题描述】:

我们正在为 Kafka 设置 MirrorMaker 2.0。如果我理解正确,复制集群中的主题偏移量是不相等的。这对于普通的 Kafka 应用程序来说不是问题,因为消费者组也会被复制。 Flink 在内部将 Kafka 偏移存储在状态中 - 我假设在使用状态重新启动作业后,事情可能会出错。有没有办法设置 Flink,以便我们可以从复制的 Kafka 集群上的集群故障中恢复?我认为我们应该以某种方式迁移状态,但没有这样做的经验。

【问题讨论】:

    标签: apache-kafka apache-flink flink-streaming apache-kafka-mirrormaker


    【解决方案1】:

    我认为在这种情况下迁移状态不会有帮助。我可以看到解决这个问题的两种方法,但它们都不是完美的:

    1. 从技术上讲,您可以禁用在检查点存储偏移量并在消费者中启用enable.auto.commit,但我认为这有点危险,因为可能会丢失数据。
    2. 您可以扩展FlinkKafkaConsumer 并修改open 函数,这样它就会忽略存储在状态中的偏移量,而是使用fetcher 来获取偏移量。我认为这应该可以正常工作,因为如果启用了检查点,则会在检查点上将偏移量提交给 Kafka。

    【讨论】:

      【解决方案2】:

      MirrorMaker 2 设法通过内部主题同步偏移量,并使用消息的时间戳来说明故障转移情况下的同步和漂移。

      【讨论】:

      • 好的,但是 Flink 并没有意识到这一点,因为它根本没有使用 Kafka 来存储偏移量来保证一次性语义
      • @bottaio 你在比较苹果和橘子。您不能使用 Flink 单独设置跨 DC 复制,并使用典型的消费-生产操作。至少不是没有偏移不匹配,这需要使用时间戳在外部解决,您可以按时寻找消费者群体
      • 我不知道大家是否有使用 Flink 的经验,但是当从保存点/检查点开始时,存储在 Kafka 中的偏移量基本上是无用的 - Flink 将使用内部存储的偏移量。保存点/检查点可能指向任何时间点 - Kafka 中只存储了一个用于最新检查点的值。此外,这个值甚至可能与最近成功的检查点不对应——在某些情况下,Flink 会继续处理数据并且无法创建检查点。在这种情况下,存储在 Kafka 中的偏移量在极少数情况下可能包括来自失败检查点的数据。
      • 我期待有经历过此类失败场景或知道可能设置的人的回答。
      • Flink 通常不应该存储失败检查点的偏移量,因为实际的偏移量存储是在检查点发出信号完成后完成的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2021-07-06
      • 2021-08-11
      • 2019-12-07
      相关资源
      最近更新 更多