Apache Kafka 是一種发布-订阅消息的分布式系统.能够将消息归类为不同主题.应用程序能在Kafka上发布信息,或订阅主题进而接受特定主题下发布的消息.Producer发布消息,而Consumer收集并处理消息.作为分布式系统,Kafka在集群中运行,每个节点被称为Broker.

Kafka维护每个主题的分区日志.消息会发布到相应的主题中,每个分区都是一个有序的消息子集.同一个主题的多个分区能够通过集群中的多个Broker传送,这种方法提高了主题的容量与吞吐量.使其超越了单一机器所能提供的容量与吞吐量.消息在分区内被有序排列,每个消息都包含一个特定的偏移量.Kafka中消息可以通过一个包含主题,分区以及偏移量的组合来确定.Producer能够根据消息的主键选择消息应该写入哪一个分区,也能够简单的用循环的方式,让消息分布在各分区之间.

Consumer会在Consumer组中注册,每个组包括一个或多个Consumer,每个Consumer读取一个或多个主题分区.每组中的每条消息只能传送给一个Consumer.但是,如果多个组订阅了同一个主题,那么每个组都将得到所有的消息.一个组中包含多个Consumer有助于获得加载平衡(可以支持高于单个Consumer处理能力的吞吐量)与高可用性(如果一个Consumer出现错误,它所读取的分区将重新分配给组中其他Consumer).

一个Consumer或Consumer组将读取其订阅的所有数据,所以如果一个应用只关注一个数据子集,那么就应该讲该数据自己与其他数据放在两个不同的主题中.如果多个主题总是一起读取和处理,那么应该讲他们归在同一个主题中.

不过,分区是并行化处理的主要的单元.每个分区只能配对一个服务器,但是一个主题可以与分区中和同样大.另外,每个分区的信息最多由同一组中的一个Consumer读取,所以尽管可以通过增加Consumer数量来增加读取吞吐量,但其实主题中可用分区的数量会带来限制.因此,建议每个节点上分区的数量至少与集群中服务器的数量一样多,为以后几年的增长做准备.实际上,每个主题可以包含几百个分区,这了并不存在任何缺陷.

Kafka 存储了预先配置时长范围内(通常为几周或几个月)的所有消息,而且对于每个Consumer读取的信息只保留最后一条消息的偏移量.因此,用户可以从最近一次正确的偏移量开始,重新读取主题分区,进而从错误中回复.用户也可以将消息队列回溯,然后重新读取信息.在解决bug以及其他问题是,”回溯”特点会非常有用.如果只存储一段时间内的所有消息,不跟踪记录每个Consumer和消息的确认,那么Kafka能够扩展到10000多个Consumer,支持他们的非频繁批量读(如MapReduce任务),甚至是在吞吐量非常高的情况下,也能保持较短的延迟.传统的信息Broker则跟踪用户的确认信息,通常需要在内存中存储所有未收到答复的消息.如果用户数量比较多,或者读取批数据的用户数量比较多,就会导致交换,使性能严重降低.

以下为Kafka的常见用途:

- Kafka能取代应用架构中的传统信息Broker或者信息队列,用于分离服务

- Kafka最常用于高速活动流,如网站点击流(website clickstream), 度量(metrics)以及日志(logging)

- Kafka也常用于流数据的处理.它可以同时用作信息流的来源和输送目位置(数据流任务在目的位置记录其他系统读取的结果).

Hadoop-No.16之Kafka的更多相关文章

  1. hadoop+yarn+hbase+storm+kafka+spark+zookeeper)高可用集群详细配置

    配置 hadoop+yarn+hbase+storm+kafka+spark+zookeeper 高可用集群,同时安装相关组建:JDK,MySQL,Hive,Flume 文章目录 环境介绍 节点介绍 ...

  2. 大数据组件原理总结-Hadoop、Hbase、Kafka、Zookeeper、Spark

    Hadoop原理 分为HDFS与Yarn两个部分.HDFS有Namenode和Datanode两个部分.每个节点占用一个电脑.Datanode定时向Namenode发送心跳包,心跳包中包含Datano ...

  3. java+hadoop+spark+hbase+scala+kafka+zookeeper配置环境变量记录备忘

    java+hadoop+spark+hbase+scala 在/etc/profile 下面加上如下环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_102 expor ...

  4. 二十一、Hadoop学记笔记————kafka的初识

    这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...

  5. [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化

    6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...

  6. 二十二、Hadoop学记笔记————Kafka 基础实战 :消费者和生产者实例

    kafka的客户端也支持其他语言,这里主要介绍python和java的实现,这两门语言比较主流和热门 图中有四个分区,每个图形对应一个consumer,任意一对一即可 获取topic的分区数,每个分区 ...

  7. hadoop kafka install (6)

    reference: http://kafka.apache.org/quickstart  http://dblab.xmu.edu.cn/blog/1096-2/ hadoop@iZuf68496 ...

  8. 阿里封神谈hadoop学习之路

    阿里封神谈hadoop学习之路   封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 s ...

  9. kafka 单机配置

    http://blog.csdn.net/jingshuigg/article/details/24439637 . su root : chown -R hadoop:hadoop version- ...

随机推荐

  1. H2内嵌数据库的使用

    H2内嵌数据库的使用 H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制. 同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容. H2还提供兼容模式,可以兼容一些主流 ...

  2. 并不对劲的复健训练-bzoj5339:loj2578:p4593:[TJOI2018]教科书般的亵渎

    题目大意 题目链接 题解 先将\(a\)排序. \(k\)看上去等于怪的血量连续段的个数,但是要注意当存在\(a_i+1=a_{i+1}\)时,虽然它们之间的连续段为空,但是还要算上:而当\(a_m= ...

  3. 并不对劲的bzoj4231: 回忆树

    题目大意 \(n\)个点的树,每条边上有一个小写字母. 操作:给定2个点\(u\),\(v\)(\(u\)可能等于\(v\))和一个非空字符串\(s\),问从\(u\)到\(v\)的简单路径上的所有边 ...

  4. 项目实践 hrm项目的设计过程

    人事管理系统的设计过程 一.数据库表和持久化类 1.1   进行需求分析,根据功能模块设计数据库表 1.2   设计持久化实体 面向对象分析,即根据系统需求提取出应用中的对象,将这些对象抽象成类,再抽 ...

  5. WPF的硬件加速

    wpf根据硬件 可以做出三档的渲染 dx7以下 第0档  不支持硬件加速 dx7-dx9 第1档, 不支持所有硬件加速,但支持一部分 dx9 以上 支持所有硬件加速 可以用编程的方式取代 当前设备处于 ...

  6. 如何配置数据库镜像<一>

    一.简介 “数据库镜像”是Sql Server 2005推出的一个主要用于提高数据库可用率的软件解决方案.镜像是基于每个数据库执行的,仅适用于使用完整恢复模式的数据库.简单恢复模式和大容量日志恢复模式 ...

  7. 如何调试Python程序 通过IDLE

    在python3.3环境下 1.写一个简单地Python源文件,比如test.py,内容如下: import sys, osdef test(arg1, arg2): print "begi ...

  8. js之数据类型(对象类型——构造器对象——函数1)

    函数它只定义一次,但可能被多次的执行和调用.JavaScript函数是参数化的,函数的定义会包括形参和实参.形参相当于函数中定义的变量,实参是在运行函数调用时传入的参数. 一.函数定义 函数使用fun ...

  9. js之语句(条件语句,循环语句,跳转语句)

    一.条件语句 1.if语句 条件语句是通过判断指定表达式的值来决定执行还是跳过某些语句,这些语句是代码是“决策点”有时称之为“分支”. if语句是一种基本的控制语句,它让Javascript程序可以选 ...

  10. img 图像底部留白的原因以及解决方法

    有时候,我们在添加图片img标签后并没有给该标签设置magrin属性的margin-bottom值,在有些浏览器中打开就会出现图像底部留白,为什么为造成这个原因?下面就来进行分析:由于img元素默认为 ...