zoukankan      html  css  js  c++  java
  • Kafuka面试(整合Kafka两种模式区别)

    整合Kafka两种模式说明

    ★面试题:Receiver & Direct

    开发中我们经常会利用SparkStreaming实时地读取kafka中的数据然后进行处理,在spark1.3版本后,kafkaUtils里面提供了两种创建DStream的方法:

    1.Receiver接收方式:

    KafkaUtils.createDstream(开发中不用,了解即可,但是面试可能会问)

    Receiver作为常驻的Task运行在Executor等待数据,但是一个Receiver效率低,需要开启多个,再手动合并数据,再进行处理,很麻烦

    Receiver那台机器挂了,可能会丢失数据,所以需要开启WAL(预写日志)保证数据安全,那么效率又会降低!

    Receiver方式是通过zookeeper来连接kafka队列,调用Kafka高阶APIoffset存储在zookeeper,由Receiver维护,

    spark在消费的时候为了保证数据不丢也会在Checkpoint中存一份offset,可能会出现数据不一致

    所以不管从何种角度来说,Receiver模式都不适合在开发中使用

    2.Direct直连方式:

    KafkaUtils.createDirectStream(开发中使用,要求掌握)
    Direct方式是直接连接kafka分区来获取数据,从每个分区直接读取数据大大提高了并行能力

    Direct方式调用Kafka低阶APIoffset自己存储和维护,默认由Spark维护在checkpoint中,消除了与zk不一致的情况

    当然也可以自己手动维护,把offset存在mysqlredis

    所以基于Direct模式可以在开发中使用,且借助Direct模式的特点+手动操作可以保证数据的Exactly once 精准一次

     

    扩展:关于消息语义

    实现方式

    消息语义

    存在的问题

    Receiver

    at most once

    最多被处理一次

    会丢失数据

    Receiver+WAL

    at least once

    最少被处理一次

    不会丢失数据,但可能会重复消费,且效率低

    Direct+手动操作

    exactly once

    只被处理一次

    不会丢失数据,也不会重复消费,且效率高

    ●注意:

    开发中SparkStreamingkafka集成有两个版本:0.80.10+

    0.8版本有ReceiverDirect模式(但是0.8版本生产环境问题较多,在Spark2.3之后不支持0.8版本了)

    0.10以后只保留了direct模式(Reveiver模式不适合生产环境),并且API有变化(更加强大)

    graphic

    http://spark.apache.org/docs/latest/streaming-kafka-integration.html

     graphic

    ●结论:

     

    1. 我们学习和开发都直接使用0.10版本中的direct模式
    2. 但是关于ReceiverDirect的区别面试的时候要能够答得上来
    -------------------------------------------------------------------------------------------

     

    -Reiⅳver接收模式

    1. 单个 Receive效率低需要开启多个 Receiver再手动进行数据合并( union)
    2. Receiver机器如果挂了,数据会丢失,可以开启WAL,但是效率又会降低
    3. Receiver模式使用的是 Kafka的高阶封装的)AP, offset,是维护到zk中,并且 SparkStreaming还会维护到checkpoint中这样可能会出现数据不一致
    4. 还有很多其他的问题

    Direct直连模式

    1. Direct直连模式是直接对接 Kafka的分区读取效率高
    2. 使用的是 Kafka的低阶(底层的APl, offset是维护到 checkpoint中避免了与zk的不一致当然也可以手动维护到MySQL./ Redis中

    注意:

            老版本的Kaka本身的 offset!默认在冰k中新版本的在 Kafka的内部主题中 consumer offsets因为zk压力会很大不适合频繁更新
     

    ♥总结:

               不管开发还是学习都直接使用Drec直连模式即可,并且是使用 spark-streaming-kafka010版本

     

    注意:

    • SparkStreaming整合 Kafka有两个版本的ar包0.8,0.10
    • 0.8版本有 Receiⅳer和 Direc模式但是0.8版本生产环境问题较多,在Spak2.3之后不支持0.8版本了)
    • 0.10以后只保留了 direct模式( Revelⅳver模式不适合生产环境),并且0.10版本AP有变化(更加强大)
       



  • 相关阅读:
    [网络技术][转]网卡的offload概念
    [网络技术][转]路由表查找过程(ip_route_input_slow)
    [linux-内核][转]内核日志及printk结构浅析
    [DPDK][转]DPDK编程开发(4)—lcore
    [技术新闻]相关网站
    [计算机、网络相关历史]unix简史
    [编辑器]sublime使用入门
    [CDN]CDN的系统架构
    [windows操作系统]windows管理
    [安卓]创建一个视图类
  • 原文地址:https://www.cnblogs.com/TiePiHeTao/p/35a269ecd1fda1e0e2ab3be025ab7cb7.html
Copyright © 2011-2022 走看看