因此,在我们的一个kafka主题中,有接近100 GB的数据。我们正在运行spark-structured来获取S3格式的数据
当数据达到10 S3时,流可以正常运行,并且我们能够以S3格式获取数据。但由于有100 it的内存,在kafka中传输数据需要花费很长时间。
问: spark-streaming如何从Kafka读取数据?是否从当前偏移量中获取整个数据?或者是成批接受一定大小的产品?
发布于 2018-12-20 22:29:20
Spark将像其他任何Kafka消费者一样,分批处理消费者群体。因此,它从上次使用的偏移量中获取尽可能多的数据(基于各种Kafka消费者设置)。从理论上讲,如果您有相同数量的分区,并且提交间隔与10 GB相同,那么执行100 GB应该只需要10倍的时间。你还没有说明目前需要多长时间,但对一些人来说,1分钟与10分钟可能看起来像是“永远”,当然。
我建议您结合使用kafka-consumer-groups命令行工具和诸如Burrow或Remora之类的工具来绘制随时间变化的消费者延迟。如果您注意到延迟中的上升趋势,那么Spark消耗记录的速度不够快。为了克服这个问题,第一个选择是确保Spark executors的数量均匀地消耗所有Kafka分区。
您还需要确保除了使用和写入记录之间的简单过滤器和映射之外,您不会进行主要的数据转换,因为这也会引入滞后。
对于非Spark方法,我想指出的是,Confluent S3连接器也是批量的,因为它只会周期性地刷新到S3,但消耗本身仍然比Spark更接近实时。但是,如果堆足够大并且刷新配置设置为较大的值,我可以验证它是否能够写入非常大的S3文件(几GB大小)。
Pinterest的Secor是另一个不需要手动编码的选项
https://stackoverflow.com/questions/53863369
复制相似问题