背景:
     当今社会各种应用系统诸如商业、社交、搜索、浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临例如以下几个挑战:
  1. 怎样收集这些巨大的信息
  2. 怎样分析它
  3. 怎样及时做到如上两点
     以上几个挑战形成了一个业务需求模型,即生产者生产(produce)各种信息,消费者消费(consume)(处理分析)这些信息,而在生产者与消费者之间,须要一个沟通两者的桥梁-消息系统。
     从一个微观层面来说,这样的需求也可理解为不同的系统之间怎样传递消息。

Kafka诞生:由 linked-in 开源

kafka-即是解决这类问题的一个框架,它实现了生产者和消费者之间的无缝连接。

kafka-高产出的分布式消息系统(A high-throughput distributed messaging system)

Kafka特性:它形容自己的设计是独一无二的,先看一下它有怎样过人之处:

  • 快:单个kafka服务每秒可处理数以千计client发来的几百MB数据。
  • 可扩展性:一个单一集群可作为一个大数据处理中枢,集中处理各种类型业务
  • 持久化:消息被持久化到磁盘(可处理TB数据级别数据但仍保持极高数据处理效率),而且有备份容错机制
  • 分布式:着眼于大数据领域,支持分布式,集群可处理每秒百万级别消息
  • 实时性:生产出的消息可马上被消费者消费

Kafka的组件:
  • topic:消息存放的文件夹即主题
  • Producer:生产消息到topic的一方
  • Consumer:订阅topic消费消息的一方
  • Broker:Kafka的服务实例就是一个broker
例如以下图所看到的,Producer生产的消息通过网络发送给Kafka cluster,而Consumer从当中消费消息

Topic 和Partition:


     消息发送时都被发送到一个topic,其本质就是一个文件夹,而topic由是由一些Partition Logs(分区日志)组成,其组织结构例如以下图所看到的:

     我们能够看到,每个Partition中的消息都是有序的,生产的消息被不断追加到Partition log上,当中的每个消息都被赋予了一个唯一的offset值。
     Kafka集群会保存全部的消息,无论消息有没有被消费;我们能够设定消息的过期时间,仅仅有过期的数据才会被自己主动清除以释放磁盘空间。比方我们设置消息过期时间为2天,那么这2天内的全部消息都会被保存到集群中,数据仅仅有超过了两天才会被清除。
     Kafka须要维持的元数据仅仅有一个--消费消息在Partition中的offset值,Consumer每消费一个消息,offset就会加1。事实上消息的状态全然是由Consumer控制的,Consumer能够跟踪和重设这个offset值,这种话Consumer就能够读取任何位置的消息。
     把消息日志以Partition的形式存放有多重考虑,第一,方便在集群中扩展,每一个Partition能够通过调整以适应它所在的机器,而一个topic又能够有多个Partition组成,因此整个集群就能够适应随意大小的数据了;第二就是能够提高并发,由于能够以Partition为单位读写了。
     
分布式:
     这些Partitions分布在集群的每一台server上,而每个Partition在集群中都能够有多个备份,这个备份数量是可配置的。
     每一个Partition都有一个leader server,而其他备份的server都称为followers,仅仅有leaderserver才会处理这个Partition上全部的读写请求,而其他followers则被动的复制leader上的数据。假设一个leader挂掉了,followers中的一个server则会自己主动升级为leader。因此,事实上集群中的每一个server都扮演着一个Partition的leaderserver,和其他Partition的followerserver。

Producers:
     Producer能够依据自己的选择公布消息到一个主题,Producer也能够自己决定把消息公布到这个主题的哪个Partition,当然我们能够选择API提供的简单的分区选择算法,也能够自己去实现一个分区选择算法。

Consumers:
     消息传递通常由两种模式,queuing(队列)和publish-subscribe (公布-订阅)
  • queuing:每一个Consumer从消息队列中取走一个消息
  • pub-scrib:消息被广播到每一个Consumer
     Kafka通过提供了一个对Consumer的抽象来同一时候实现这两种模式-ConsumerGroup。Consumer实例须要给自己指定一个ConsumerGroup的名字,假设全部的实例都用同一个ConsumerGroup名字,那么这些Consumer就会以queuing的模式工作;假设全部的实例分别用的不同的ConsumerGroup名字,那么它们就以public-subscribe模式工作。

例如以下图所看到的:含两台server的集群一共同拥有p0~p3四个Partition,两个Consumer Group,在Group内部是以queuing的模式消费Partition,在Group之间是以pub-scrib模式消费。
  
 
消息顺序性:
     Kafka是怎样确保消息消费的顺序性的呢?前面讲到过Partition,消息在一个Partition中的顺序是有序的,可是Kafka仅仅保证消息在一个Partition中有序,假设要想使整个topic中的消息有序,那么一个topic仅设置一个Partition就可以。

















kafka具体解释一、Kafka简单介绍的更多相关文章

  1. 【Android 应用开发】 ActionBar 样式具体解释 -- 样式 主题 简单介绍 Actionbar 的 icon logo 标题 菜单样式改动

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/3926916 ...

  2. kafka简单介绍

    Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...

  3. Kafka具体解释二、怎样配置Kafka集群

    Kafka集群配置比較简单,为了更好的让大家理解.在这里要分别介绍以下三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例 ...

  4. Kafka监控工具kafka-monitor v0.1简要介绍

    Kafka Monitor为Kafka的可视化管理与监控工具,为Kafka的稳定运维提供高效.可靠.稳定的保障,这里主要简单介绍Kafka Monitor的相关功能与页面的介绍: Kafka Moni ...

  5. Kafka具体解释五、Kafka Consumer的底层API- SimpleConsumer

    1.Kafka提供了两套API给Consumer The high-level Consumer API The SimpleConsumer API 第一种高度抽象的Consumer API,它使用 ...

  6. 【Apache Kafka】二、Kafka安装及简单示例

    (一)Apache Kafka安装 1.安装环境与前提条件   安装环境:Ubuntu16.04   前提条件: ubuntu系统下安装好jdk 1.8以上版本,正确配置环境变量 ubuntu系统下安 ...

  7. Kafka学习笔记之Kafka背景及架构介绍

    0x00 概述 本文介绍了Kafka的创建背景,设计目标,使用消息系统的优势以及目前流行的消息系统对比.并介绍了Kafka的架构,Producer消息路由,Consumer Group以及由其实现的不 ...

  8. kafka具体解释四:Kafka的设计思想、理念

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/suifeng3051/article/details/37606001      本节主要从总体角度 ...

  9. 《HTML 5网页开发实例具体解释》样章、内容简单介绍、前言

    http://spu.jd.com/1167757597.html http://product.dangdang.com/23484942.html 样章 http://download.csdn. ...

  10. Linux守护进程简单介绍和实例具体解释

    Linux守护进程简单介绍和实例具体解释 简单介绍 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程. ...

随机推荐

  1. 新手学习selenium路线图(老司机亲手绘制)-学前篇

    前言: 本来这篇是只在微信公众号(yoyoketang)上发布的,最近一搜,发现本很多人copy(copy公众号的,图片是加载不出来的)了,还没注明出处,不想多说什么,博客上也同步更新这篇吧! 最近群 ...

  2. c++11改进我们的程序之垃圾回收(一)

    c#和java中有自己主动垃圾回收机制,.net执行时和java虚拟机能够管理分配的堆内存,在对象失去引用时自己主动回收,因此在c#和jva中,  内存管理不是大问题.c++语言没有垃圾回收机制,必须 ...

  3. [Android Pro] Android中IntentService的原理及使用

    转载自:http://blog.csdn.net/ryantang03/article/details/8146154 在Android开发中,我 们或许会碰到这么一种业务需求,一项任务分成几个子任务 ...

  4. OpenCV学习(29) 凸包(convexhull)

    在opencv中,通过函数convexHulll能很容易的得到一系列点的凸包,比如由点组成的轮廓,通过convexHull函数,我们就能得到轮廓的凸包.下面的图就是一些点集的凸包. 求凸包的代码如下: ...

  5. 【计算机网络】详解网络层(二)ARP和RARP

    ARP ARP(Address Resolution Protocol,地址解析协议)是将IP地址解析为以太网MAC地址(物理地址)的协议.在局域网中,当主机或其他网络设备有数据要发送给另一个主机或设 ...

  6. 第2章 排序 | 第10节 计数排序练习题 && 基数排序

    对于一个int数组,请编写一个计数排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] 计数排序 ...

  7. 一键切换皮肤的解决思想及iframe嵌套时寻找下级iframe的方法

    项目中有个一键切换皮肤的功能,感觉还不错,记录下,就是各颜色样式设置起来太复杂了,不知道有没有更简便的方法: 1.切换皮肤结构层 <li title="<s:text name= ...

  8. WordPress 后台添加额外选项字段到常规设置页面

    有时候我们需要添加一些额外的设置选项到常规设置(后台 > 设置 > 常规)页面,下面是一个简单的范例: 直接添加到主题的 functions.php 即可:   /*** WordPres ...

  9. A5-1和DES两个加密算法的学习

    A5-1加密算法 1.基本原理 A5-1加密算法是一种流password,通过密钥流对明文进行加密.然后用密钥流进行对密文的解密操作. 这样的算法主要用于GSM加密.也就是我们平时打电话的时候.通信数 ...

  10. new/malloc的差别

    1. malloc()函数 1.1 malloc的全称是memory allocation.中文叫动态内存分配. 原型:extern void *malloc(unsigned int num_byt ...