Kafka 概述
kafka 简介
kafka 是一个为事件流而生的分布式消息系统,广泛应用于网页用户记录跟踪,IOT 设备,日志采集,系统监控等场景。
kafka 是用于构建实时数据管道和流应用程序。具有横向扩展,容错,wicked fast(变态快)等优点,并已在成千上万家公司运行。
例子
举个例子,大部分现代人都刷过抖音、b 站、淘宝,都知道这些应用 app 有个特点就是推荐算法,你浏览的越多,它们越知道你对什么感兴趣。推荐算法如果离开了用户行为数据,也就是用户的浏览记录,那么就像是巧妇难为无米之炊,需要有数据的支撑才能让推荐算法发挥出它的效果。
那么,有什么实现方式呢,无非就是以下几种,用户点击一下,算法接到一个请求,进行分析,然后输出相关推荐。
这种方式是不可能的,为什么呢,一是一个点击一个点击的数据量太少,除非做下存储,然后隔一段事件批量拉取做分析,二是对算法系统压力太大,万一用户请求太多了,容易打爆算法系统。还有一种就是接入消息中间件,就像 kafka,用户点击一下,生产者(这里可以是 app 或者相应查询内容的后端服务)发送一个事件到 kafka 服务器(专业术语是 broker),然后就不管了,这时候算法系统(消费者)拉取数据,进行实时或者离线分析,就算你高峰期用户请求再多,有 broker 在,最多就是消息挤压,我慢慢消费就行了,总有一天消费得完,分析完再反哺用户,然后用户再点击,再分析,再反哺,造成一个循环,这个循环进行的多了,用户的兴趣爱好就暴露的越明显,这也就是越刷越停不下来的原因。(大家要少刷啊!多读书!少看抖音)。
可能大家还有个疑惑,既然你请求多了会打爆算法系统,那么为什么不会打爆 broker 呢,这就设计到 kafka 的横向扩容特性了,纵使你数据再多,我加机器,加分区解决。
还是例子
再举个例子,是从kafka 中文教程看到的,很生动形象(做下推荐,这个是为大佬翻译了 kafka 官方文档,并且一直在维护,nb!yyds!)。
生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了,这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里,而这个篮子就是”kafka“。
鸡蛋其实就是“数据流”,系统之间的交互都是通过“数据流”来传输的(就是tcp、https什么的),也称为报文,也叫“消息”。
消息队列满了,其实就是篮子满了,”鸡蛋“ 放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
各位现在知道kafka是干什么的了吧,它就是那个"篮子"。
名词解释
后面大家会看到一些关于kafka的名词,比如topic、producer、consumer、broker,我这边来简单说明一下。
-
producer:生产者,就是它来生产“鸡蛋”的。
-
consumer:消费者,生出的“鸡蛋”它来消费。
-
topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。
-
broker:就是篮子了。