apache-spark - 如何在 Kafka 主题中流式传输 100GB 的数据?

标签 apache-spark apache-kafka spark-structured-streaming

因此,在我们的一个 kafka 主题中,有接近 100 GB 的数据。 我们正在运行 spark-structured streaming 以获取 S3 中的数据

当数据达到 10GB 时,流式传输运行良好,我们能够在 S3 中获取数据。 但是对于 100GB,在 kafka 中流式传输数据需要很长时间。

问题:spark-streaming如何从kafka中读取数据? 它是否从当前偏移量中获取全部数据? 还是需要批量处理?

最佳答案

Spark 将像任何其他 Kafka 消费者一样,分批处理消费者群体。因此,它尽可能从上次消费的偏移量中获取尽可能多的数据(基于各种 Kafka 消费者设置)。理论上,如果分区数量相同,提交间隔与 10 GB 相同,则执行 100 GB 只需要 10 倍的时间。您没有说明目前需要多长时间,但对于某些人来说,1 分钟与 10 分钟可能看起来“永远”,当然。

我建议您使用 kafka-consumer-groups 命令行工具结合 Burrow 或 Remora 等工具绘制消费者随时间变化的滞后时间。 ... 如果您注意到延迟呈上升趋势,则说明 Spark 消耗记录的速度不够快。 为了克服这个问题,第一个选择是确保 Spark 执行器的数量均匀地消耗所有 Kafka 分区。

除了在消费和写入记录之间进行简单的过滤器和映射之外,您还需要确保没有进行主要的数据转换,因为这也会引入延迟。


对于非 Spark 方法,我想指出 Confluent S3 连接器也是批处理的,因为它只会定期刷新到 S3,但消耗本身仍然比 Spark 更接近实时。我可以验证它是否能够写入非常大的 S3 文件(大小为几 GB),但是,如果堆足够大并且刷新配置设置为较大的值。

Pinterest 的 Secor 是另一个不需要手动编码的选项

关于apache-spark - 如何在 Kafka 主题中流式传输 100GB 的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53863369/

相关文章:

apache-kafka - Kafka多节点集群监控

apache-kafka - Storm Kafka Spout 上的最大元组重放次数

apache-spark - 如何一次读取流数据集并输出到多个接收器?

apache-spark - 具有单个源的多个接收器的结构化流

scala - Spark 作业完成但应用程序需要时间关闭

apache-spark - Spark : Is the memory required to create a DataFrame somewhat equal to the size of the input data?

node.js - 如何在typescript下使用kafka-node?

apache-spark - 通过 PySpark 在 Kafka-Spark Structured Streaming 集成中遇到 NoClassDefFoundError 错误

apache-spark - Spark : Understanding Dynamic Allocation

scala - 无法声明字符串类型累加器