Hadoop-No.16之Kafka
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的更多相关文章
- hadoop+yarn+hbase+storm+kafka+spark+zookeeper)高可用集群详细配置
配置 hadoop+yarn+hbase+storm+kafka+spark+zookeeper 高可用集群,同时安装相关组建:JDK,MySQL,Hive,Flume 文章目录 环境介绍 节点介绍 ...
- 大数据组件原理总结-Hadoop、Hbase、Kafka、Zookeeper、Spark
Hadoop原理 分为HDFS与Yarn两个部分.HDFS有Namenode和Datanode两个部分.每个节点占用一个电脑.Datanode定时向Namenode发送心跳包,心跳包中包含Datano ...
- java+hadoop+spark+hbase+scala+kafka+zookeeper配置环境变量记录备忘
java+hadoop+spark+hbase+scala 在/etc/profile 下面加上如下环境变量 export JAVA_HOME=/usr/java/jdk1.8.0_102 expor ...
- 二十一、Hadoop学记笔记————kafka的初识
这些场景的共同点就是数据由上层框架产生,需要由下层框架计算,其中间层就需要有一个消息队列传输系统 Apache flume系统,用于日志收集 Apache storm系统,用于实时数据处理 Spark ...
- [大牛翻译系列]Hadoop(16)MapReduce 性能调优:优化数据序列化
6.4.6 优化数据序列化 如何存储和传输数据对性能有很大的影响.在这部分将介绍数据序列化的最佳实践,从Hadoop中榨出最大的性能. 压缩压缩是Hadoop优化的重要部分.通过压缩可以减少作业输出数 ...
- 二十二、Hadoop学记笔记————Kafka 基础实战 :消费者和生产者实例
kafka的客户端也支持其他语言,这里主要介绍python和java的实现,这两门语言比较主流和热门 图中有四个分区,每个图形对应一个consumer,任意一对一即可 获取topic的分区数,每个分区 ...
- hadoop kafka install (6)
reference: http://kafka.apache.org/quickstart http://dblab.xmu.edu.cn/blog/1096-2/ hadoop@iZuf68496 ...
- 阿里封神谈hadoop学习之路
阿里封神谈hadoop学习之路 封神 2016-04-14 16:03:51 浏览3283 评论3 发表于: 阿里云E-MapReduce >> 开源大数据周刊 hadoop 学生 s ...
- kafka 单机配置
http://blog.csdn.net/jingshuigg/article/details/24439637 . su root : chown -R hadoop:hadoop version- ...
随机推荐
- PAT(Advanced Level)1055.The World's Richest
Forbes magazine publishes every year its list of billionaires based on the annual ranking of the wor ...
- [转帖]关于Java中SQL语句的拼接规则
关于Java中SQL语句的拼接规则 自学demo 的时候遇到的问题 结果应该是 '"+e.getName()+"' 注意 一共有三组标点符号 (除去 方法函数后面的括号) 实现目标 ...
- Oracle导入/导出某个用户下的数据库
导出 exp用户名/密码@数据库实例owner=用户名file=文件存储路径 例如:exp MM/123456@ORCL owner=MM file=F\abcd.dmp 导入 imp用户名/密码@数 ...
- Linux_目录基本操作_常用命令【详解】
Linux_常用命令 Linux文件系统的目录树结构:[Linux世界里一切皆文件]:说白了,就是文件和文件夹(目录)之间的操作. 普通用户kkb所有文件及文件夹,其实都位于root用户的 /home ...
- if(!ConnectDBProc(strCmd,m_dbUserName,m_dbPassword))
https://wenku.baidu.com/view/826b3d426bec0975f565e204.html
- 7.bash作业控制
7.作业控制本节讨论作业控制是什么.它怎么工作.以及 Bash 里面怎么使用这些功能7.1 作业控制基础作业控制是指有选择的停止(暂停)并在后来继续(恢复)执行某个进程的能力.通常,用户通过 Bash ...
- Winform_chart控件_心得
效果图: 1.首先,在工具箱找到chart控件,拖到窗体中. 2.关于chart控件的细节设计: series集合设计: chartType可以选择折线图.柱状图.圆饼图等等. isValueShow ...
- nfs服务器的搭建和使用
目录 更新记录 1.nfs介绍 1.1 nfs概念 1.2 nfs工作原理 1.3 nfs通讯过程 2.搭建和测试 NFS 服务器 2.1 搭建NFS服务器 2.2 测试NFS服务器 3.在线调试:N ...
- Express bodyParser中间件使用方式
bodyParser中间件用来解析http请求体,是express默认使用的中间件之一. 1.这个模块提供以下解析器 (1) JSON body parser (2) Raw body parser ...
- js安全类型检测
背景: 都知道js内置的类型检测,大多数情况下是不太可靠的,例如: typeof . instanceof typeof 返回一个未经计算的操作数的类型, 可以发现所有对象都是返回object ...