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- ...
随机推荐
- git常用命令总结——覆盖日常开发全操作
前言:Git是目前世界上最先进的分布式版本控制系统,对的,最先进! 1. 版本库,又名仓库,repository 可理解成一个目录,目录里的所有文件都可被Git管理,Git可以跟踪每个文件的修改.删除 ...
- Socket与系统调用深层分析
实验背景: Socket API编程接口之上可以编写基于不同网络协议的应用程序: Socket接口在用户态通过系统调用机制进入内核: 内核中将系统调用作为一个特殊的中断来处理,以socket相关系统调 ...
- [转帖]VIM常用快捷键
VIM常用快捷键 https://www.cnblogs.com/markleaf/p/7808817.html 快捷键能够显著的提高工作效率 一.移动光标 h,j,k,l 上,下,左,右ctrl-e ...
- PAT A1065 A+B and C (64bit) (20 分)
AC代码 #include <cstdio> int main() { #ifdef ONLINE_JUDGE #else freopen("1.txt", " ...
- 使用django连接数据库 对数据库 增删改查
如果路由访问的时候出现 就把项目中的注释掉 登录功能 1 路由访问如果不加斜杠 会内部自动重定向加斜杠的路由 所有的静态文件(css,js,前端第三方类库)默认都放在static文件下 #静态文件配置 ...
- 简单Kibana命令
1 查看健康状态 GET _cat/health?v epoch timestamp cluster status node.total node.data shards 1531290005 14: ...
- Latex使用记事(1)
意义用途 用于出版物的排版,样式控制,使得编排标准美观. 整体框架 一个最简环境 \documentclass{article} \begin{document} content... \end{do ...
- Java HashMap、HashTable与ConCurrentHashMap
一.Java中数据存储方式最底层的两种结构 1.数组:存储空间连续,寻址迅速,增删较慢.(代表:ArrayList) 2.链表:存储空间不连续,寻址慢,增删较快.(代表:LinkedList) 二.哈 ...
- JS基础_for循环练习3
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 记录FTPClient超时处理的相关问题(转)
https://www.cnblogs.com/dasusu/p/10006899.html 记录 FTPClient 超时处理的相关问题 apache 有个开源库:commons-net,这个开 ...