在翻阅这本书的时候遇到了下面的短语,https://learning.oreilly.com/library/view/stream-processing-with/9781491944233/ch19.html 尤其是这个短语 The driver does not send data to the executors; instead, it simply sends a few offsets they use to directly consume data. -似乎所有执行器(工作节点)都必须与kafka连接,因为任务很可能在任何执行器上运行 数据传递的要点是spark驱动程序从apachekafka查询偏移量并确定每个批处理间隔的偏移量范围。在接收到这些偏移量之后,驱动程序通过为每个分区启动一个任务来调度它们,从而使kafka分区和spark分区之间的并行度达到1:1。每个任务使用其特定的偏移量范围检索数据。 驱动程序不向执行者发送数据;相反,它只是发送一些偏移量,它们使用这些偏移量直接使用数据。因此,从apachekafka摄取数据的并行性要比传统的接收器模型好得多,因为每个流都由一台机器消耗。
2条答案
按热度按时间olhwl3o21#
在翻阅这本书的时候遇到了下面的短语,https://learning.oreilly.com/library/view/stream-processing-with/9781491944233/ch19.html
尤其是这个短语
The driver does not send data to the executors; instead, it simply sends a few offsets they use to directly consume data.
-似乎所有执行器(工作节点)都必须与kafka连接,因为任务很可能在任何执行器上运行数据传递的要点是spark驱动程序从apachekafka查询偏移量并确定每个批处理间隔的偏移量范围。在接收到这些偏移量之后,驱动程序通过为每个分区启动一个任务来调度它们,从而使kafka分区和spark分区之间的并行度达到1:1。每个任务使用其特定的偏移量范围检索数据。
驱动程序不向执行者发送数据;相反,它只是发送一些偏移量,它们使用这些偏移量直接使用数据。因此,从apachekafka摄取数据的并行性要比传统的接收器模型好得多,因为每个流都由一台机器消耗。
nnsrf1az2#
我建议你把spark的文档和Kafka的集成一起看一遍
https://spark.apache.org/docs/latest/structured-streaming-kafka-integration.html
“如何实际整合,使整合尽可能容易”:
我不知道你的意思是什么-但基本上当你连接到kafka时,你应该提供引导服务器:引导服务器是一个主机/端口对列表,用于建立到kafka集群的初始连接。这些服务器只是用于初始连接,以发现完整的集群成员身份。因此,Kafka集群的节点数量不会改变集成的方式
“是否需要所有workers节点都与代理连接,在这种情况下,它可能无法扩展?”:
spark集成的工作方式如下:
sprak驱动程序-连接到kafka以了解所需的分区和偏移
根据第1部分,分区被分配给spark“workers”——通常是从kafka分区到spark分区的1比1。
并不是所有的worker(我猜你指的是executors)都连接到所有kafka节点,所以在本例中它也是可伸缩的
旁注:您可以使用一个配置来进一步断开从单个kafka分区读取的spark分区的数量,即minpartitions和spark2.4.7
最后一点:使用kafka的spark streaming是一个非常常用和已知的用例,在非常大的数据生态系统中使用,作为第一个直观的想法,我假设它是可伸缩的