首先Flume和Kafka都是消息系统,但是它俩也有着很多不同的地方,Flume更趋向于消息采集系统,而Kafka更趋向于消息缓存系统。
【一】设计上的不同
Flume是消息采集系统,它主要解决问题是消息的多元采集。因此Flume在实现上提供了多达十几种的Flume Source,以供用户根据不同的应用场景来采集数据。也正因为Flume提供了这些采集消息的Flume Source,使得用户采集消息变得很简单,用户往往只需要对原始数据稍作处理然后将数据发送给Flume Source。在Flume的Thrift Source中,Flume已经实现了Thrift Source服务器端,用户只需要编写客户端将数据发送给Flume。
Kafka是消息缓存系统,主要是用来缓存数据,缓存时间可以由配置文件设定,在缓存时间内,缓存的数据不论是否被消费,都不会删除,超过缓存时间Kafka才会把数据删除以释放空间。这一点与Flume不同,Flume的数据一旦确认被Sink接收就会被删除。
【二】数据处理上的不同
Flume接收到数据就会主动把数据推送(push)到Sink,Sink确认收到后会将数据从Channel中删除,因此Flume主要是快速的采集数据,数据对它来说只是过客,Flume注重的是speed。
Kafka收到数据后会先把数据缓存起来,无论下游有没有人消费数据,数据暂时缓存在服务器集群中,注重的是store。
【三】push vs pull
Flume是实实在在包含Source、Channel、Sink三个组件,Source用来接收数据,Channel用来缓存数据,Sink用来发送数据,而且是主动push给下游,这就导致下游接收方只能是一个,因为如果下游有多个接收者,接收的速率不同就会导致接收速度低的接收者接收不到数据的情况(Channel会在Sink确认后删除数据)。如果想把数据发送给多个接收者,那就只能让Source把数据写到多个Channel,再由Channel经各自的Sink发送给不同的接收者。
Kafka其实只包含有broker cluster,用来缓存数据,他的Producer和Consumer都需要用户自己实现;broker cluster更像是一个提供存储数据功能的文件系统,用户自己实现往里面读写数据,broker cluster不需要关心用户怎么实现的,因此Kafka对Producer和Consumer的依赖非常小,专心做缓存。当Consumer需要订阅某个topic的数据时候,Consumer主动去取数据,broker cluster被动的提供数据,这样就可以同时支持多个Consumer订阅数据。
【四】Kafka的主题和划分以及复制因子
Kafka在接收数据的时候,Producer可以指定一个主题,Kafka按照主题来分类数据,Consumer订阅数据的时就可以按需订阅某一类数据。
Kafka的划分是在主题上的进一步细分,例如可以把web应用中不用用户的数据按照不同的划分来分别存储,同一个划分内的数据存储的时候拥有唯一的连续递增的编号,这个编号又称作偏移量,偏移量在Consumer中保存,用来依次读取数据,当然也可改变编号重复读取或者跳读。
复制因子是Kafka集群提高容错性的一个措施,一个划分内的数据会根据复制因子个数把数据复制到不同broker上,本broker负责将该划分内的数据读写请求,称为主节点,其他从节点负责跟进复制数据。主题的复制因子定为多少个应该根据自己的broker cluster机器个数合理确定。
Kafka能够保证一个划分内的数据在被Consumer消费的时候是有序的,而不能保证不同划分内的数据是有序的,因此如果想所有数据有序那就只能有一个划分。
转载请注明原文出处 http://www.cnblogs.com/vincent-vg/p/5826786.html,谢谢
消息系统Flume与Kafka的区别的更多相关文章
-
Flume 和 kafka的区别和对比
定义: Flume:是Cloudera提供的一个分布式的海量日志采集.聚合和传输的系统: Kafka:是一种高吞吐量的分布式发布订阅消息系统: 各特点: 场景: Flume主要是和HDFS\HBase ...
-
新闻实时分析系统-Flume+HBase+Kafka集成与开发
1.下载Flume源码并导入Idea开发工具 1)将apache-flume-1.7.0-src.tar.gz源码下载到本地解压 2)通过idea导入flume源码 打开idea开发工具,选择File ...
-
高吞吐量的分布式发布订阅消息系统Kafka-- 管理工具 Kafka Manager
一.概述 Kafka在雅虎内部被很多团队使用,媒体团队用它做实时分析流水线,可以处理高达20Gbps(压缩数据)的峰值带宽. 为了简化开发者和服务工程师维护Kafka集群的工作,构建了一个叫做Kafk ...
-
分布式发布订阅消息系统 Kafka 架构设计[转]
分布式发布订阅消息系统 Kafka 架构设计 转自:http://www.oschina.net/translate/kafka-design 我们为什么要搭建该系统 Kafka是一个消息系统,原本开 ...
-
分布式公布订阅消息系统 Kafka 架构设计
我们为什么要搭建该系统 Kafka是一个消息系统,原本开发自LinkedIn,用作LinkedIn的活动流(activity stream)和运营数据处理管道(pipeline)的基础. 如今它已为多 ...
-
Kafka是分布式发布-订阅消息系统
Kafka是分布式发布-订阅消息系统 https://www.biaodianfu.com/kafka.html Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apa ...
-
分布式消息系统:Kafka
Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...
-
最牛分布式消息系统:Kafka
Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...
-
发布-订阅消息系统Kafka简介
转载请注明出处:http://www.cnblogs.com/BYRans/ Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式 ...
随机推荐
-
xcode svn commit is not under version control (1) &; git commit
使用Xcode提交一个第三方库时,由于包含资源文件,总是提交不了,提示报错:XXX commit is not under version control (1) 网上查了下,得知 xcode对于sv ...
-
重构alert,confirm
最近写了一个重构的alert,confirm控件,调用时直接使用alert,confirm即可 //调用方法 alert("提示语") window.confirm('你确定要删除 ...
-
再详细的介绍一下Unity5的AssetBundle
之前曾经写了一篇博客介绍Unity5的AssetBundle,结果似乎很受关注.不过似乎很多人看了之后都不懂,主要是因为不太明白AssetBundle是什么,它的依赖关系和结构是什么的,就直接想拿代码 ...
-
[SQL]SUTFF内置函数的用法
STUFF 删除指定长度的字符并在指定的起始点插入另一组字符. 语法 STUFF ( character_expression , start , length , character_express ...
-
XAML中的Path
利用Path创建图形的时候,如果path对象的Fill属性不设置,那么绘制出来的图形首尾是不连接的. 如果设置了Fill属性,当Fill的Color属性为Transparent时,图形也不会首尾连接: ...
-
【leetcode】15. 3Sum
题目描述: Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find ...
-
cloudstack的ZONE删除不掉?来这招吧
老是提示什么物理网络被使用之类的, 可以进数据库去直接删除. I want to delete a zone,by this way:(1)delete all VMs in zone.(2)dele ...
-
Nginx 主配置文件参数详解
Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...
-
delegate异步
using System; using System.Runtime.Remoting.Messaging; using System.Threading; using System.Threadin ...
-
容器虚拟网卡与网桥docker0虚拟网卡的veth pair的配对
一)基本知识: Docker 安装时会自动在 host 上创建三个网络:none,host,和bridge:详细说明可参考其它文档.我们可用 docker network ls 命令查看: 基于DRI ...