Kafuka面试(整合Kafka两种模式区别)

Kafuka面试(整合Kafka两种模式区别)整合Kafka两种模式说明★面试题:Receiver&Direct开发中我们经常会利用SparkStreaming实时地读取kafka中的数据然后进行处理,在spark1.3版本后,kafkaUtils里面提供了两种创建DStream的方法:1.Receiver接收方式:KafkaUtils.createDstream(开发中不用,了解即可,但是面试可能会…

大家好,又见面了,我是你们的朋友全栈君。

整合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. 还有很多其他的问题
Kafuka面试(整合Kafka两种模式区别)

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有变化(更加强大)
    Kafuka面试(整合Kafka两种模式区别)
     

 

 

转载于:https://www.cnblogs.com/TiePiHeTao/p/35a269ecd1fda1e0e2ab3be025ab7cb7.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/138604.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • GET和POST两种基本请求方法的区别「建议收藏」

    GET和POST两种基本请求方法的区别「建议收藏」GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。当你在面试中被问到这个问题,你的内心充满了自信和喜悦。 你轻轻松松的给出…

    2022年6月13日
    32
  • 【iOS开发-图层】图层的获取与一些属性

    【iOS开发-图层】图层的获取与一些属性

    2022年2月5日
    40
  • 大数据技术的发展趋势

    大数据技术的发展趋势英国牛津大学教授维克托·迈尔-舍恩伯格在其所撰写的《大数据时代》中表述,大数据时代是“已经发生的未来”,而在这个已经发生的未来里,没有旁观者。作为时代发生的必然产物,大数据正加速渗透至我们的日常生活,正完成对各传统领域的颠覆。本文从大数据时代的特点出发,为读者介绍目前的大数据技术的发展趋势以及大数据的生态体系。大数据时代的特点和市场规模大数据时代两个特点。第一,大数据技术以开源为主,迄今为止,尚未形成绝对技术垄断,即便是IBM、甲骨文等行业巨擘,也同样是集成了开源技术和该公司已有产品而已。开源技

    2022年5月12日
    44
  • Android 显示刷新机制、VSYNC和三重缓存机制

    Android 显示刷新机制、VSYNC和三重缓存机制Android显示刷新机制、VSYNC和三重缓存机制为了理解APP是如何进行渲染的,我们就必须了解手机硬件是如何工作的,也必须理解什么是VSYNC。首先,我们需要了解2个相关概念:刷新率(RefreshRate):代表了屏幕在一秒内刷新屏幕的次数,这取决于硬件的固定参数,例如60Hz。帧率(FrameRate):代表了GPU在一秒内绘制操作的帧数,例如30fps,60fps。GPU会获取图形数据进行渲染,然后硬件负责把渲染后的内容呈现到屏幕上,他们两者不停的进行协作。

    2022年5月21日
    42
  • android usb调试在哪,USB调试在哪 安卓USB调试怎么打开「建议收藏」

    android usb调试在哪,USB调试在哪 安卓USB调试怎么打开「建议收藏」关于安卓USB调试大家都知道,但是由于因为安卓系统版本的原因,USB调试的选项有一些变化,导致有的朋友不知道如何打开USB调试,现在小编就给大家提供最新的USB调试模式打开方法。1、“USB调试”是什么?在计算机和Android设备之间复制数据、移动设备上安装应用程序、读取日志数据等需要打开手机上的“USB调试”模式。“USB调试”是Android提供的一个用于开发工作的功能。只有在打开了“USB…

    2022年9月13日
    0
  • python中产生随机数的代码_python生成1~10的随机偶数

    python中产生随机数的代码_python生成1~10的随机偶数Python产生随机数:一.Python自带的random库1.参生n–m范围内的一个随机数:random.randint(n,m)2.产生0到1之间的浮点数:random.random()3.产生n—m之间的浮点数:random.uniform(1.1,5.4)4.产生从n—m间隔为k的整数:…

    2022年10月5日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号