为什么你要使用这么强大的分布式消息中间件——kafka
为什么是kafka?
在我们大量使用分布式数据库、分布式计算集群的时候,是否会遇到这样的一些问题:
- 我们想分析下用户行为(pageviews),以便我们设计出更好的广告位
- 我想对用户的搜索关键词进行统计,分析出当前的流行趋势
- 有些数据,存储数据库浪费,直接存储硬盘效率又低
这些场景都有一个共同点:
数据是由上游模块产生,上游模块,使用上游模块的数据计算、统计、分析,这个时候就可以使用消息系统,尤其是分布式消息系统!
知道了我们有必要在数据处理系统中使用一个消息系统,但是我们为什么一定要选kafka呢?现在的消息系统可不只有kafka。
话说阿里中间件团队和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简介
Kafka是Linkedin于2010年12月份创建的开源消息系统,它主要用于处理活跃的流式数据。活跃的流式数据在web网站应用中非常常见,这些活动数据包括页面访问量(Page View)、被查看内容方面的信息以及搜索情况等内容。 这些数据通常以日志的形式记录下来,然后每隔一段时间进行一次统计分析。
传统的日志分析系统是一种离线处理日志信息的方式,但若要进行实时处理,通常会有较大延迟。而现有的消息队列系统能够很好的处理实时或者近似实时的应用,但未处理的数据通常不会写到磁盘上,这对于Hadoop之类,间隔时间较长的离线应用而言,在数据安全上会出现问题。Kafka正是为了解决以上问题而设计的,它能够很好地进行离线和在线应用。
kafka部署结构
消息队列(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服务就像是一个大的水池。不断的生产、存储、消费着各种类别的消息。那么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会有同步锁控制。
有的时候,不光是灯红酒绿的世界可以让人沉迷,技术的世界也同样如此。而且有的时候,技术的世界比前者更加可怕,它不但能让你悄无声息的陷入进去,还能让你产生一种你很上进,你很努力的假象,以至于等到你恍然大悟那天,已经悔之晚矣。
所以大家一定要找准自己的方向,不能因为今天阿里招聘需求这么写就去学这些,明天看到一个技术很牛逼又去学那个。因此我给大家推荐一个Java架构群:895244712,里面有最清晰的互联网架构学习路线,更有具体的知识点讲解,都是免费的学习资源,推荐给大家。
未来Kafka中间件
目前该中间件只完成了初级阶段功能,很多功能都不完善不深入,随着应用业务的拓展及Kafka未来版本功能支持。以Kafka消息中间件为中心的大数据处理平台还有很多任务去实现。
一般在互联网中所流动的数据由以下几种类型:
- 需要实时响应的交易数据,用户提交一个表单,输入一段内容,这种数据最后是存放在关系数据库(Oracle, MySQL)中的,有些需要事务支持。
- 活动流数据,准实时的,例如页面访问量、用户行为、搜索情况等。我们可以针对这些数据广播、排序、个性化推荐、运营监控等。这种数据一般是前端服务器先写文件,然后通过批量的方式把文件倒到Hadoop(离线数据分析平台)这种大数据分析器里面,进行慢慢的分析。
- 各个层面程序产生的日志,例如http的日志、tomcat的日志、其他各种程序产生的日志。这种数据一个是用来监控报警,还有就是用来做分析。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【熵增教育】Jacob-你所遗漏的SpringBoot日志管理知识——熵增学院
Spring Boot对所有内部日志记录使用了Commons Logging,但是底层日志实现是开放的。可以为 Java Util日志、Log4J2和Logback。对于每种日志都预先配置为使用控制台输出和可选的文件输出。默认为Logback 日志配置 通过将相应的库添加到classpath可以激活各种日志系统,然后在classpath根目录下提供合适的配置文件可以进一步定制日志系统,配置文件也可以通过Spring Environment的logging.config属性指定。 以下文件会根据你选择的日志系统进行加载: 日志系统 定制配置 Logback logback-spring.xml,logback-spring.groovy,logback.xml或logback.groovy Log4j log4j.properties或log4j.xml Log4j2 log4j2-spring.xml或log4j2.xml JDK (Java Util Logging) logging.properties 注 如果可能的话,建议你使用-spring变种形式定义日志配置(例如,使用lo...
- 下一篇
快速了解 mpvue 开发小程序
一、概念 mpvue是 美团 修改了 Vue.js 的 runtime 和 compiler 使其可以运行在小程序环境中,从而引入了整套 Vue.js 开发体验的小程序框架。 二、优化细节 1、实例生命周期 不同于vue的是我们会在小程序 onReady 后,再去触发 vue mounted 生命周期 除了 Vue 本身的生命周期外(详细的 vue 生命周期文档请看生命周期钩子),mpvue 还兼容了小程序生命周期,这部分生命周期钩子的来源于微信小程序的 Page, 除特殊情况外,不建议使用小程序的生命周期钩子。 2、模板语法 几乎全支持 官方文档:模板语法,但需要注意的是: (1)组件:由于要预编译出 wxml,只能使用单文件组件(.vue 组件)的形式进行支持,不支持:动态组件,异步组件,自定义 render,inline-template,X-Templates,<script type="text/x-template"> 字符串模版,Slot(scoped 暂时还没做支持)。 (2)不要在选项属性或回调上使用箭头函数,.eg: //箭头函数是和父级上下文绑定在一起...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Hadoop3单机部署,实现最简伪集群