Spark Streaming揭秘 Day32

Kafka原理内幕

今天开始,会有几天的时间,和大家研究下Kafka。在大数据处理体系中,kafka的重要性不亚于SparkStreaming。可以认为sparkstreaming掌控处理,而kafka掌控流程控制。

让我们来了解下sparkstreaming和kafka的整合细节。

三大特征

消息组件一般有两种类型:

  1. 队列方式,可能有一个循环器不断循环一个对象(消息队列),当消息A进入中队列中,被唤醒感知到队列时,交给处理者handler来处理。只可以给一个消费者。

  2. 生产者-消费者模式,也称为发布-订阅模式,可以同时支持多个消费者和多个生产者,

Kafka作为一个集大成者的消息中间件,有三个很重要的特征:

  1. 分布式,为大规模消息打下基础
  2. 可以对消息进行持久化,默认会存放7天,意味可以重复消费
  3. 既支持队列方式,也支持发布-订阅模式

由于基于集群设计,又提供了非常强的持久化和容错能力。我们可以认为它是类似一个增加了消息处理能力的HDFS。

四项重要设计

Kafka设计哲学上基本观点是认为数据时时刻刻都在流动,虽然数据在磁盘中,但因为基于内核进行交换,获得了数据近乎是存储在内存中的速度。没有必要放在用户空间中。

四个重要设计:

  • kafka的零拷贝(zero copy)

一般应用程序有一个buffer空间在用户空间中,来自于网络或者磁盘,无论来自网络或者磁盘,都需要通过内核,也就是说内核中也要有buffer。

1)磁盘到内核 --> 2)内核到应用程序buffer 写数据时 --> 3)应用程序buffer写到内核buffer --> 4)内核buffer写到磁盘

这个过程多了两次拷贝,kafka本身因为不处理数据,所以没有必要把数据放入应用程序的buffer中。所以搞了个基于内核的数据存储和传输,使用sendfile机制,直接基于内核kernel处理。

  • push和pull的模式
    无论有多少producer,都往kafka进行push数据,kafka可以不关心producer的具体位置。consumer是从kafka pull数据,无论有多少消费数据,对kafka基本没有压力。

  • 采用zookeeper来管理brokers和consumers
    zookeeper主要存放元数据信息,这是一种积木式创新的体现。

  • 在consumer端实现消息的一致性
    kafka本身可以保存consumer已经消费过数据的offset,所以如果consumer出错的化,重启启动consumer,就可以从最近的数据开始。

基本流程

kafka从整体角度讲,所有数据存储被抽象为topic,topic表明了不同数据类型,在broker中可以有很多个topic,producer发出消息给broker,consumer订阅一个或者多个topic,从broker拿数据。从broker拿数据和存数据都需要编码和解码,只有数据特殊时,才需要自己的解码器。

consumer订阅了topic之后,它可以有很多的分组,sparkStreaming采用迭代器进行处理。生产者发布消息时,会具体到topic的分区中,broker会在分区的后面追加,所以就有时间的概念,当发布的消息达成一定阀值后写入磁盘,写完后消费者就可以收到这个消息了。

最后,想说,在中kafka里没有消息的id,只有offset,而且kafka本身是无状态的,offset只对consumer有意义。

小结

Kafka是实时的,又是离线的,采用磁盘存储系统存储消息,可以满足对消息处理系统的一切期望。
由于kafka的存在,可以整合在不同地域的异构系统,把一切都整合起来,打破了机器和系统之间空间的差异,通过Kafka可以打破了异构系统的物理空间分布的区别。"无为而无不为"是Kafka的设计哲学,与大家共勉。

欲知后事如何,且听下回分解!

DT大数据每天晚上20:00YY频道现场授课频道68917580

Kakfa揭秘 Day1 Kafka原理内幕的更多相关文章

  1. Kakfa揭秘 Day4 Kafka中分区深度解析

    Kakfa揭秘 Day4 Kafka中分区深度解析 今天主要谈Kafka中的分区数和consumer中的并行度.从使用Kafka的角度说,这些都是至关重要的. 分区原则 Partition代表一个to ...

  2. Kakfa揭秘 Day3 Kafka源码概述

    Kakfa揭秘 Day3 Kafka源码概述 今天开始进入Kafka的源码,本次学习基于最新的0.10.0版本进行.由于之前在学习Spark过程中积累了很多的经验和思想,这些在kafka上是通用的. ...

  3. Kakfa揭秘 Day2 Kafka内核再揭秘

    Spark Streaming揭秘 Day33 Kafka内核再揭秘 优秀的框架会把引擎做到极致,Kafka就是这样,让我们再深入一下研究. 设计目标 kafka系统有着比较独特的的设计,包括5点: ...

  4. Kakfa揭秘 Day9 KafkaReceiver源码解析

    Kakfa揭秘 Day9 KafkaReceiver源码解析 上一节课中,谈了Direct的方式来访问kafka的Broker,今天主要来谈一下,另一种方式,也就是KafkaReceiver. 初始化 ...

  5. Kakfa揭秘 Day8 DirectKafkaStream代码解析

    Kakfa揭秘 Day8 DirectKafkaStream代码解析 今天让我们进入SparkStreaming,看一下其中重要的Kafka模块DirectStream的具体实现. 构造Stream ...

  6. Kakfa揭秘 Day7 Producer源码解密

    Kakfa揭秘 Day7 Producer源码解密 今天我们来研究下Producer.Producer的主要作用就是向Kafka的brokers发送数据.从思考角度,为了简化思考过程,可以简化为一个单 ...

  7. Kakfa揭秘 Day6 Consumer源码解密

    Kakfa揭秘 Day6 Consumer源码解密 今天主要分析下Consumer是怎么来工作的,今天主要是例子出发,对整个过程进行刨析. 简单例子 Example中Consumer.java是一个简 ...

  8. Kakfa揭秘 Day5 SocketServer下的NIO

    Kakfa揭秘 Day5 SocketServer下的NIO 整个Kafka底层都是基于NIO来进行开发的,这种消息机制可以达到弱耦合的效果,同时在磁盘有很多数据时,会非常的高效,在gc方面有非常大的 ...

  9. kafka原理解析

    两张图读懂kafka应用: Kafka 中的术语 broker:中间的kafka cluster,存储消息,是由多个server组成的集群. topic:kafka给消息提供的分类方式.broker用 ...

随机推荐

  1. i = i++;

    在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区.语句istore_1是将堆栈中的值弹出存入相应的变量区(赋值):语句iload_1是将变量区中的值暂存如堆栈中. ...

  2. 火狐restclient

    RESTClient是一款用于测试各种Web服务的插件,它可以向服务器发送各种HTTP请求(用户也可以自定义请求方式),并显示服务器响应.使用RESTClient您可以方便的测试各种Web服务,为您的 ...

  3. iOS 获取内存大小使用情况(进度条显示)

    一.获取设备内存大小方法 //返回存储内存占用比例 - (NSString *)getFreeDiskspaceRate{ float totalSpace; .f; NSError *error = ...

  4. javaweb学习总结二十三(servlet开发之线程安全问题)

    一:servlet线程安全问题发生的条件 如果多个客户端访问同一个servlet时,发生线程安全问题,那么它们访问的是相同的资源.如果访问 的不是相同资源,则不存在线程安全问题. 实例1:不会产生线程 ...

  5. truncate 函数用法示例

    --Oracle trunc()函数的用法 /**************日期********************/ select trunc(sysdate) from dual --2015- ...

  6. 【转】创业C2C(Copy To China):停车位共享APP,用户、市政能够买账?

    如果周六中午想开车到旧金山的Mission吃顿早午餐,笔者劝您还是省省吧.因为不光是到了吃饭的地儿排队得耗上一个小时,就是满大街的兜圈子找停车位都能折腾死人.那个时候您或许就明白了,其实最苦的并不是买 ...

  7. VS的启动方式

    启动VS的两种方式1.双击图标2.调出cmd,输入 devenv

  8. iOS设备中WiFi、蓝牙和飞行模式的开启与关闭

    转自:http://www.cnblogs.com/OtionSky/archive/2011/11/08/iOS_WiFi_Controller.html 今天写了一段有关在iPhone程序中开关W ...

  9. Unity出现 error building player exception android (invocation failed)

    今天在编译Android的时候出现这个错误 error building player exception android (invocation failed) 百度谷歌之后,看到xuanyuson ...

  10. 一个简单的Redis结合Spring MVC架构以及实现过程

    为了加快开发人员对公司项目的理解.更加容易入手和对公司项目的整体把控. 整体框架 首先介绍公司项目的整体框架,闲话少说,直接上图 整体性能分析 这就是公司的一个整体的架构,为了开发人员对架构的侧重点的 ...