在前面几篇博客我们介绍过一种消息中间件——RabbitMQ,本篇博客我们介绍另外一个消息中间件——Kafka,Kafka是由LinkedIn开发的,使用Scala编写,是一种分布式,基于发布/订阅的消息系统,在介绍 kafka 之前,我们首先需要知道为什么会诞生 kafka 。

1、kafka的诞生

  假设 A 公司有一个购物网站,随着业务的扩大,网站的访问量越来越大,为了维持网站的运营,部署系统的服务器也越来越多,A 公司的运维人员为了更好的维护系统,不得不经常查看日志,但是问题来了,业务规模的增大,日志也越来越多,总是到服务器上查看日志,总归是不方便的,并且不光是运维人员,开发人员在解决问题时也需要查看日志,那么有没有一个专门的平台来收集日志呢?然后大家都通过此平台查看日志,进而分析日志。于是便构建了一个日志分析平台。

  ①、日志分析平台

  

  通过此平台,大家都能利用该平台收集到的日志进行相应的后续操作了。但是新的需求又来了,为了更好的提高用户的体验度,增加用户对网站的黏性,需要收集用户对页面的浏览、搜索等行为,然后根据这些信息给用户推送精准的商品信息,于是,便又构建了一个用户行为跟踪平台。

  ②、用户行为跟踪平台

  

  以上只是两个业务需求场景,后续如果还有新的业务需求,还会构建类似这样的系统,当系统增多以后,会发现公司维护这些系统都得花费很大的精力,而且我们总结一下,类似这样的系统,我们抽象一下,无非就是下图的场景:

  

  我们把各种模块产生的数据都收集起来放到一个平台中,然后相应的人员去该平台获取相应的数据即可,该平台可以用来收集通用类型的数据,规模可以随着公司的业务增长而增长。

  kafka 便是为了解决上述问题而设计的一款基于发布与订阅的消息系统。

2、Kafka的体系架构

  

  ①、Kafka Broker : 一个独立的kafka 服务器便是一个 Broker,多个 Broker 组成一个集群,Broker 接收来自生产者 Producer 的消息,为消费者 Consumer 提供服务。

  ②、Producer:消息生产者,向 Broker 提供消息。

  ③、Consumer:消息消费者,从 Broker 读取消息。

  ④、Zookeeper:为集群分布式一致性提供服务,以及在早期kafka版本保存消息相关元数据。

  后面会对这四个模块进行详细介绍,这里大家先了解一下。

3、Kafka的优势

  前面我们就介绍过一个消息队列RabbitMQ,在这个家族中还有诸如 ActiveMQ,ZeroMQ,甚至Redis等,那么我们为什么要选择 Kafka呢?

  ①、多个生产者

  kafka可以无缝的支持多个生产者,也就是它适合从多个消息生产系统收集数据,比如同时从前端系统,后端系统,数据库,服务器等收集数据,并以统一的格式对外提供数据,数据消费者根据订阅的消息队列获取相应的数据。

  ②、多个消费者

  除了支持多个生产者,kafka 也支持多个消费者,而且消费者之间互不影响,这与别的消息系统不同,别的消息系统消息一旦被一个消费者消费掉之后,别的消费者是无法在获取的。

  ③、消息持久化

  kafka 中的消息可以根据设置保存到磁盘中,消费者由于处理速度慢或者流量高峰等无法及时处理消息,那么持久化数据可以保证数据不会丢失,以备消费者接着读取。

  ④、伸缩性

  kafka 作为一个分布式消息系统,对在线集群做横向扩展丝毫不影响整体系统的可用性。

  ⑤、高性能

  上面的一些特性,使得 kafka 成为了一个高性能的发布与订阅消息系统,通过横向扩展消费者、生产者和 broker,kafka 可以轻松处理巨大流量的消息流,并且在处理大量数据的同时,还能保证亚秒级的消息延迟。

参考文档:

  官网:http://kafka.apache.org

  官网中文翻译:http://kafka.apachecn.org/

  《Kafka 权威指南》

  

Kafka 详解(一)------简介的更多相关文章

  1. 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING

    <Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th  2014 Email:skyseraph00@163.com 更多精彩请直接 ...

  2. 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)

    执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...

  3. 淘宝JAVA中间件Diamond详解之简介&快速使用 管理持久配置的系统

    http://my.oschina.net/u/435621/blog/270483?p=1 淘宝JAVA中间件Diamond详解(一)---简介&快速使用 大家好,今天开始为大家带来我们通用 ...

  4. Kafka详解一:Kafka简介

    问题导读 1.Kafka有何特性?2.Kafka有哪些组件? 背景:     当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临如下几个挑战: ...

  5. [转]kafka详解

    一.入门     1.简介     Kafka is a distributed,partitioned,replicated commit logservice.它提供了类似于JMS的特性,但是在设 ...

  6. (转)kafka 详解

    kafka入门:简介.使用场景.设计原理.主要配置及集群搭建(转) 问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的 ...

  7. Kafka 详解(二)------集群搭建

    这里通过 VMware ,我们安装了三台虚拟机,用来搭建 kafka集群,虚拟机网络地址如下: hostname                      ipaddress             ...

  8. 大数据入门第十七天——storm上游数据源 之kafka详解(一)入门与集群安装

    一.概述 1.kafka是什么 根据标题可以有个概念:kafka是storm的上游数据源之一,也是一对经典的组合,就像郭德纲和于谦 根据官网:http://kafka.apache.org/intro ...

  9. kafka详解

    一.基本概念 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计. 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语:Kafk ...

随机推荐

  1. 查看服务器运行多少个ASP.NET Core程序

    有时候,我们会想知道某台机器上面跑了什么程序. 当程序部署到IIS上面的时候,我们只需要打开IIS一看,就知道有多少个站点在运行了. 当我们在CentOS上面部署的时候,就没那么的直观了. 当然对于熟 ...

  2. webpack4.0各个击破(10)—— Integration篇

    webpack作为前端最火的构建工具,是前端自动化工具链最重要的部分,使用门槛较高.本系列是笔者自己的学习记录,比较基础,希望通过问题 + 解决方式的模式,以前端构建中遇到的具体需求为出发点,学习we ...

  3. [前端]AngularJS 簡易物件修改入門

    各位好,今天要來介紹如何簡單的修改網站上AngularJS相關Application的內容 進而做到某些效果.(警告!所有的Web Application都應該在後端加上相關驗證) 透過本篇你可以簡單 ...

  4. MVC架构中的Repository模式 个人理解

    关于MVC架构中的Repository模式   个人理解:Repository是一个独立的层,介于领域层与数据映射层(数据访问层)之间.它的存在让领域层感觉不到数据访问层的存在,它提供一个类似集合的接 ...

  5. 【Unity】微软的一款依赖注入组件

    前言 前面学习了autofac这个依赖注入组件,本来是打算写在一起的,因为这个组件没打算像autofac一样详细的写,只是写下以前自己鼓捣玩搭建框架然后使用的一个依赖注入组件,并且也是进行了封装使用. ...

  6. ECMASCript 2019可能会有哪些特性?

    最近这些年,ECMASCript标准发展节奏非常稳定,每年都会发布新的特性.那么,ECMASCript 2019可能会有哪些特性呢? ECMASCript语法提案的批准流程 JavaScript的标准 ...

  7. CSS常见的中属性级,选择符级的Hack

    注意:尽量找到通用方法而减少对CSS Hack的使用,大规模使用CSS Hack会带来维护成本的提高以及浏览器版本变化而带来类似Hack失效等系列问题. 星号 * 针对IE6,7:下划线 _ 针对ie ...

  8. Android为TV端助力 关于4.0之后不能直接获取SD卡外部存储路径的问题

    Environment.getExternalStorageDirectory()是Android 2.x时代的产物,那时Android主流设备只有很小的内置存储器,然后都会外置一张sd卡,那时这个方 ...

  9. Android Activity生命周期图解

    Android activity的生命周期这一张图就够了. 验证结果: 值得注意的是从activity A--->activity B是先执行A的onPause然后走B的生命周期最后才走A的on ...

  10. 算法:数组中和为s的两个数字

    @问题 :题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述:对应每个测试案例,输出两个数,小的先输出.@思路: 两个 ...