《深入理解Spark》之Spark与Kafka整合原理

本文详细介绍了Spark与Kafka整合的两种方式:Receiver和Direct模式。Receiver模式中,receiver线程从Kafka接收数据并备份,但存在数据丢失风险,可通过WAL解决。Direct模式下,每个executor直接从Kafka获取数据,任务数量等于topic的partition数,更适用于有ACL验证的场景。在实际应用中,Direct模式更为常见。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

spark和kafka整合有2中方式

1、receiver

顾名思义:就是有一个线程负责获取数据,这个线程叫receiver线程

解释:

1、Spark集群中的某个executor中有一个receiver线程,这个线程负责从kafka中获取数据

 注意:这里的获取数据并不是从kafka中拉(pull) 而是接收数据,具体原理是该receiver线程发送请求到kafka,这个请求包含对kafka中每个partition的消费偏移量(offset),然后由kafka主动的推送数据到spark中,再有该receiver线程负责接收数据

2、当receiver线程接收到数据后会做备份处理,即把数据备份到其他的executor中,也可能会备份到这个receiver线程所在节点的executor中

3、当备份完毕后该线程会把每个partition的消费偏移量在zookeeper中修改,(新版本的kafka的offset 保存在kafka集群中)

4、修改完offset后,该receiver线程会把"消费"的数据告诉Driver

5、Driver分发任务时会根据每个executor上的数据,根据数据本地性发送

问题:

当第三步执行完后,对于kafka来说这一批数据已经消费完成,那么如果此时Driver挂掉,那么这一批数据就会丢失,为了解决这个问题,有一个叫WAL逾写日志的概念,即把一部分数据存储在HDFS上,当Driver回复后可以从HDFS上获取这部分数据,但是开

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值