当前位置:  开发笔记 > 大数据 > 正文

Spark:并行处理多个kafka主题

如何解决《Spark:并行处理多个kafka主题》经验,为你挑选了2个好方法。

我在用spark 1.5.2.我需要使用kafka作为流媒体源来运行spark streaming工作.我需要从kafka中的多个主题中读取并以不同方式处理每个主题.

    在同一份工作中做这件事是个好主意吗?如果是这样,我应该为每个主题创建一个包含多个分区或不同流的单个流吗?

    我正在使用kafka直接蒸汽.据我所知,spark为每个分区启动了长时间运行的接收器.我有一个相对较小的集群,6个节点,每个节点有4个核心.如果我在每个主题中都有很多主题和分区,那么效率是否会受到影响,因为大多数执行者都忙于长时间运行的接收器?如果我的理解是错误的,请纠正我

nish.. 20

我做了以下观察,以防它对某人有帮助:

    在kafka直接流中,接收器不能作为长时间运行的任务运行.在每个批处理inerval的开头,首先从执行程序中的kafka读取数据.一旦阅读,处理部分就会接管.

    如果我们创建具有多个主题的单个流,则会一个接一个地读取主题.此外,过滤dstream以应用不同的处理逻辑将为作业添加另一个步骤

    创建多个流有两种方式:1.您不需要应用过滤器操作来以不同方式处理不同的主题.2.您可以并行读取多个流(而不是单个流的情况下逐个读取).为此,有一个未记录的配置参数spark.streaming.concurrentJobs*.所以,我决定创建多个流.

    sparkConf.set("spark.streaming.concurrentJobs", "4");
    


Atul Soman.. 6

我认为正确的解决方案取决于您的用例.

如果您的处理逻辑对于来自所有主题的数据是相同的,那么毫无疑问,这是一种更好的方法.

如果处理逻辑不同,我猜你从所有主题中得到一个RDD,你必须为每个处理逻辑创建一个pairedrdd并单独处理它.问题在于,这会创建一种分组处理,整体处理速度将由需要最长时间处理的主题确定.因此,数据较少的主题必须等到处理所有主题的数据.一个优点是,如果它是时间序列数据,那么处理一起进行,这可能是一件好事.

运行独立作业的另一个好处是可以更好地控制并调整资源共享.例如:处理具有高吞吐量的主题的作业可以被分配更高的CPU /内存.



1> nish..:

我做了以下观察,以防它对某人有帮助:

    在kafka直接流中,接收器不能作为长时间运行的任务运行.在每个批处理inerval的开头,首先从执行程序中的kafka读取数据.一旦阅读,处理部分就会接管.

    如果我们创建具有多个主题的单个流,则会一个接一个地读取主题.此外,过滤dstream以应用不同的处理逻辑将为作业添加另一个步骤

    创建多个流有两种方式:1.您不需要应用过滤器操作来以不同方式处理不同的主题.2.您可以并行读取多个流(而不是单个流的情况下逐个读取).为此,有一个未记录的配置参数spark.streaming.concurrentJobs*.所以,我决定创建多个流.

    sparkConf.set("spark.streaming.concurrentJobs", "4");
    



2> Atul Soman..:

我认为正确的解决方案取决于您的用例.

如果您的处理逻辑对于来自所有主题的数据是相同的,那么毫无疑问,这是一种更好的方法.

如果处理逻辑不同,我猜你从所有主题中得到一个RDD,你必须为每个处理逻辑创建一个pairedrdd并单独处理它.问题在于,这会创建一种分组处理,整体处理速度将由需要最长时间处理的主题确定.因此,数据较少的主题必须等到处理所有主题的数据.一个优点是,如果它是时间序列数据,那么处理一起进行,这可能是一件好事.

运行独立作业的另一个好处是可以更好地控制并调整资源共享.例如:处理具有高吞吐量的主题的作业可以被分配更高的CPU /内存.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有