火花流中的偏移量管理

offset management in spark streaming

据我了解,对于 spark 流应用程序(结构化流或其他),要手动管理偏移量,spark 提供了检查点功能,您只需配置检查点位置(大多数时候是 hdfs ) 在将数据写入接收器时,Spark 本身将负责管理偏移量。

但我看到很多用例不首选检查点,而是创建偏移量管理框架以在 hbase 或 mongodb 等中保存偏移量。我只是想了解为什么不首选检查点,而是创建自定义框架来管理偏移量? 是不是会导致hdfs创建小文件的问题?

https://blog.cloudera.com/offset-management-for-apache-kafka-with-apache-spark-streaming/

小文件只是 HDFS 的问题之一。在您列出的选项中更推荐使用 Zookeeper,因为您可能拥有一个(或多个)Zookeeper 集群作为 Kafka 和 Hadoop 生态系统的一部分。

不使用检查点的原因是它们与代码的拓扑高度耦合。例如,如果您 运行 map、filter、reduce 或其他 Spark 函数,那么这些函数的确切顺序很重要,并由检查点使用。

外部存储将保持一致的顺序,但具有不同的传递语义。

您也可以只存储在 Kafka 本身(但禁用自动提交)

https://spark.apache.org/docs/latest/streaming-kafka-0-10-integration.html#storing-offsets