首页 > 解决方案 > How to stream 100GB of data in Kafka topic?

问题描述

So, in one of our kafka topic, there's close to 100 GB of data. We are running spark-structured streaming to get the data in S3

When the data is upto 10GB, streaming runs fine and we are able to get the data in S3. But with 100GB, it is taking forever to stream the data in kafka.

Question: How does spark-streaming reads data from Kafka? Does it take the entire data from current offset? Or does it take in batch of some size?

标签: apache-sparkapache-kafkaspark-structured-streaming

解决方案


就像任何其他 Kafka 消费者一样,Spark 将处理消费者组,但是是分批的。因此,它从最后消费的偏移量中获取尽可能多的数据基于各种 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 是另一种不需要手动编码的选项


推荐阅读