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. Python全栈开发之4、迭代器、生成器、装饰器

    一.迭代器 1.为何要有迭代器? 对于序列类型:字符串.列表.元组,我们可以使用索引的方式迭代取出其包含的元素.但对于字典.集合.文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依 ...

  2. Maximum Frequency Stack

    Implement FreqStack, a class which simulates the operation of a stack-like data structure. FreqStack ...

  3. [转帖]云服务器使用CentOS、Debian、Ubuntu的哪个版本

    云服务器使用CentOS.Debian.Ubuntu的哪个版本 2018-09-09 12:32:45作者:ywnz稿源:云网牛站 https://ywnz.com/linuxyffq/2986.ht ...

  4. IDEA中便捷更新Git项目最新代码

    更新:IDEA中直接点击Gir后面的第一个图标 会出现一个这样的弹框,点击OK,就可以将GitLab中最新的代码更新到IDEA中(本地)

  5. 初识numpy库

    numpy是一个在Python中做科学计算的基础库,重在数值计算,也是大部分Python科学计算库的基础库,多用于在大型.多维数组上执行数值运算 numpy创建数组(矩阵): numpy中的数据类型: ...

  6. ThinkPHP开发api时多级控制器的访问方法

    发开api时,经常会用到thinkphp的多级控制器,访问方法如下: 例如:有v1和v2两个版本的接口 v1:版本控制器(类文件位置为:application/api/controller/v1/Us ...

  7. HTTP、HTTPS、WebSocket

    一 .HTTP 1.1 HTTP发展史 1.1.1 什么是HTTP 超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所 ...

  8. 查看linux服务器信息

    1.  vmstat 查看服务器内存,CPU等信息 一般是通过两个数字参数来完成的,第一个参数是采样时间间隔,单位是秒, 第二个参数是采样的次数 r:    表示运行队列,如果队列过大说明CPU很繁忙 ...

  9. MyBatis 体系结构、根配置文件、Mapper映射文件

    一.MyBatis的体系结构 1.SqlSessionFactory对象 SqlSessionFactory对象是MyBatis的管理核心,它是单个数据库映射关系经过编译后的内存镜像,是创建SqlSe ...

  10. nop4.1学习ServiceCollectionExtensions(二)(ioc,ef,ef连接的实现)

    这个是获取程序路径,并初始化文件管理类 初始化插件管理 接下来就是注册服务和autoafc 在INopStartup配置sql连接,插件,mvc等 配置了sql连接 数据库的配置类 在AddAutoM ...