在咱们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题:前端
咱们想分析下用户行为(pageviews),以便咱们设计出更好的广告位
我想对用户的搜索关键词进行统计,分析出当前的流行趋势
有些数据,存储数据库浪费,直接存储硬盘效率又低web
这些场景都有一个共同点:
数据是由上游模块产生,上游模块,使用上游模块的数据计算、统计、分析,这个时候就可使用消息系统,尤为是分布式消息系统!数据库
知道了咱们有必要在数据处理系统中使用一个消息系统,可是咱们为何必定要选kafka呢?如今的消息系统可不仅有kafka。tomcat
话说阿里中间件团队和LinkedIn团队都作了一个Kafka、RabbitMQ、RocketMQ的三者对比。这边就不献丑了,实际结果能够参考如下两篇博文:安全
阿里测试:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/服务器
LinkedIn测试:https://blog.csdn.net/SJF0115/article/details/78480433并发
对比图负载均衡
Kafka是Linkedin于2010年12月份建立的开源消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中很是常见,这些活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索状况等内容。 这些数据一般以日志的形式记录下来,而后每隔一段时间进行一次统计分析。分布式
传统的日志分析系统是一种离线处理日志信息的方式,但若要进行实时处理,一般会有较大延迟。而现有的消息队列系统可以很好的处理实时或者近似实时的应用,但未处理的数据一般不会写到磁盘上,这对于Hadoop之类,间隔时间较长的离线应用而言,在数据安全上会出现问题。Kafka正是为了解决以上问题而设计的,它可以很好地进行离线和在线应用。oop
消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已。其主要用途:不一样进程Process/线程Thread之间通讯。
高吞吐量:能够知足每秒百万级别消息的生产和消费——生产消费。
负载均衡:经过zookeeper对Producer,Broker,Consumer的动态加入与离开进行管理。
拉取系统:因为kafka broker会持久化数据,broker没有内存压力,所以,consumer很是适合采起pull的方式消费数据
动态扩展:当须要增长broker结点时,新增的broker会向zookeeper注册,而producer及consumer会经过zookeeper感知这些变化,并及时做出调整。
消息删除策略:数据文件将会根据broker中的配置要求,保留必定的时间以后删除。kafka经过这种简单的手段,来释放磁盘空间。
启动Zookeeper及Broker.
Producer链接Broker后,将消息发布到Broker中指定Topic上(能够指定Patition)。
Broker集群接收到Producer发过来的消息后,将其持久化到硬盘,并将消息该保留指定时长(可配置),而不关注消息是否被消费。
Consumer链接到Broker后,启动消息泵对Broker进行侦听,当有消息到来时,会触发消息泵循环获取消息,获取消息后Zookeeper将记录该Consumer的消息Offset。
对于kafka而言,kafka服务就像是一个大的水池。不断的生产、存储、消费着各类类别的消息。那么kafka由何组成呢?
Broker
: Kafka消息服务器,消息中心。一个Broker能够容纳多个Topic。
Producer
:消息生产者,就是向Kafka broker发消息的客户端。
Consumer
:消息消费者,向Kafka broker取消息的客户端。
Zookeeper
:管理Producer,Broker,Consumer的动态加入与离开。
Topic
:能够为各类消息划分为多个不一样的主题,Topic就是主题名称。Producer能够针对某个主题进行生产,Consumer能够针对某个主题进行订阅。
Consumer Group
: Kafka采用广播的方式进行消息分发,而Consumer集群在消费某Topic时, Zookeeper会为该集群创建Offset消费偏移量,最新Consumer加入并消费该主题时,能够从最新的Offset点开始消费。
Partition
:Kafka采用对数据文件切片(Partition)的方式能够将一个Topic能够分布存储到多个Broker上,一个Topic能够分为多个Partition。在多个Consumer并发访问一个partition会有同步锁控制。
有的时候,不光是灯红酒绿的世界可让人沉迷,技术的世界也一样如此。并且有的时候,技术的世界比前者更加可怕,它不但能让你悄无声息的陷入进去,还能让你产生一种你很上进,你很努力的假象,以致于等到你恍然大悟那天,已经悔之晚矣。这里向你们推荐一个测试交流圈q裙:790047143。
因此你们必定要找准本身的方向,不能由于今天阿里招聘需求这么写就去学这些,明天看到一个技术很牛逼又去学那个。
目前该中间件只完成了初级阶段功能,不少功能都不完善不深刻,随着应用业务的拓展及Kafka将来版本功能支持。以Kafka消息中间件为中心的大数据处理平台还有不少任务去实现。
通常在互联网中所流动的数据由如下几种类型:
须要实时响应的交易数据,用户提交一个表单,输入一段内容,这种数据最后是存放在关系数据库(Oracle, MySQL)中的,有些须要事务支持。 活动流数据,准实时的,例如页面访问量、用户行为、搜索状况等。咱们能够针对这些数据广播、排序、个性化推荐、运营监控等。这种数据通常是前端服务器先写文件,而后经过批量的方式把文件倒到Hadoop(离线数据分析平台)这种大数据分析器里面,进行慢慢的分析。 各个层面程序产生的日志,例如http的日志、tomcat的日志、其余各类程序产生的日志。这种数据一个是用来监控报警,还有就是用来作分析。