【问题标题】:Kafka - Spark direct stream fail overKafka - Spark 直接流故障转移
【发布时间】:2015-10-28 19:21:03
【问题描述】:

我们有一个简单的 spark 流应用程序,通过 spark 从 kafka 流式传输事件并将其持久化到 redis 中。

最初我们使用Receiver-based Approach,它将批次复制到 HDFS 并随后开始处理。这种方法并不像我们希望的那样稳定(我们的 hadoop 机器上有很多流量),所以我们在 spark 流中切换到 Direct Approach (No Receivers)

让我感到困惑的是文档中提到的 auto.offset.reset 参数。当作业失败或 sparkmaster 宕机时,我们会看到流作业通过处理大量事件来迎头赶上,然后加班稳定。

使用第二种方法,我们不再看到这种行为,我们不确定 spark-streaming 是真的赶上来还是刚刚从 auto.offset.reset latest 开始。

latest 是故障转移的合理默认值吗?流式作业真的能在重启/主故障时正确赶上吗?

谢谢, 渚

【问题讨论】:

    标签: apache-spark apache-kafka spark-streaming failover


    【解决方案1】:

    如果 Zookeeper 中没有初始偏移量或者如果 偏移量超出范围:

    • smallest : 自动将偏移量重置为最小偏移量
    • 最大:自动将偏移量重置为最大偏移量
    • 其他:向消费者抛出异常。如果设置为最大,消费者可能会丢失一些消息 分区,对于它订阅的主题,代理上的更改。至 防止在分区添加过程中丢失数据,将 auto.offset.reset 设置为 最小的

    此选项仅在您第一次运行作业时出现 或者当某些消息过期并且您的消费者中最后提交的偏移量不再存在时。

    如果您不想丢失数据,最好使用最小的。如果您在数据到期时间内重新启动作业,此选项不会影响您的故障转移/重新启动

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2020-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多