Kafka 详解(一)------简介

  在前面几篇博客我们介绍过一种消息中间件——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 权威指南》

  

posted @ 2018-12-09 16:56  YSOcean  阅读(5172)  评论(3编辑  收藏  举报