zoukankan      html  css  js  c++  java
  • Spark Streaming 读取 Kafka 数据的两种方式

    receiver:

    使用kafka的高级api consumerAPI,自动更新offset到zookeeper;

    在executor上会有receiver从kafka接收数据并存储在Spark executor中,在到了batch时间后触发job去处理接收到的数据,1个receiver占用1个core
    使用wal预写机制,因为需要使用hdfs等存储,因此会降低性能

    缺点:
    work中receiver读取kafka分区数据和sparkstreaming读取数据后提交offset时机,都由高阶api决定,但是会造成数据数据丢失(原因:当高阶api提交offset后,但是sparkstreaming因为某种原因不可用,这时sparksteaming读取的数据存在executor内存中,会造成数据丢失)
    假设有6个分区,这样receiver需要启动6个线程,随着数据量加大,这样会造成读写瓶颈;多个receiver中Dstream进行合并以及wal预写机制都会影响性能
    高阶消费者api提交offset到zookeeper

    direct
    没有receiver,无须使用core不停的接收数据;

    定时去kafka读取每个partition最新offset以及上次处理的offset,也会处理当前查询偏移量的数据范围
    使用kafka 简单api,自己保存offset,kafka和zookeeper不会保存偏移量(自己维护offset,sparkstreaming读取分区数据,将offset和job信息写入到CheckPointPath中,job结束,job信息删除,但是offset不删除)

  • 相关阅读:
    Map使用总结
    AutoReleasePool使用总结
    UIImage使用总结
    Subversion简明手册--使用hook svn
    转:MyEclipse8.6插件安装方法
    转:myeclipse 8.x 插件安装方法终极总结
    如何通过类找到对应的jar包
    关于更改MYECLIPSE JS 代码背景颜色
    win7 64位系统下 PL/SQL无法连接的问题
    Windows7(x64)下Oracle10g安装
  • 原文地址:https://www.cnblogs.com/geek-sharing/p/9339681.html
Copyright © 2011-2022 走看看