SparkStreaming对接kafka的两种方式

本文详细介绍了SparkStreaming与Kafka对接的receiver和direct两种方式。receiver方式中,数据存储在Executor内存可能导致丢失,可通过启用WAL解决,但并行度受限。direct方式避免了数据丢失,提供更好的并行性和事务一致性,直接从Kafka读取数据,简化并行读取,提高性能。
摘要由CSDN通过智能技术生成

第一种:receiver方式。

1、receiver不停地从kafka拉取数据,n秒钟(程序设置的)拉取产生一批数据
2、这种方式偏移量zookeeper帮我们管理,灵活性差

这种方式有缺点:
    receiver从Kafka中获取的数据都存储在Spark Executor的内存中,某个时间段内拉去的数据可能会大于某台机器executor分配的内存数量,部分数据会溢出丢失。
    针对这一问题,1.2版本之后提供记log方式(Streaming的预写日志机制)(Write Ahead Log,WAL)。该机制会将从kafka中读取的数据先保存到hdfs或者S3上,然后再去消费数据,WAL是为了防止数据的丢失,可以对数据进行恢复。所以,即使底层节点出现了失败,也可以使用预写日志中的数据进行恢复。
使用时的注意事项:
    1)Kafka中topic的partition与Spark中RDD的partition是没有关系的,因此,在KafkaUtils.createStream()中,提高partition的数量,只会增加Receiver的数量,也就是读取Kafka中topic partition的线程数量,不会增加Spark处理数据的并行度。
    2)可以创建多个Kafka输入DStream,使用不同的consumer group和topic,来通过多个receiver并行接收数据。
    3࿰

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值