大家好,欢迎来到IT知识分享网。
我有打算做培训行业,因为喜欢分享,顺便再友情卖点啥,我一直在想自己的优势在哪呢?凭啥别人买我的东西呢?
思来想去,我觉得切入点是:深入研究程序员最需要的知识,然后把文章写的识字就能看懂,争取一天之内就能掌握这个东西的大部分知识点,并且能用在工作上,概括就是:最需要,最通俗,最快速,最务实。
从这篇开始,大家看我写的怎么样,1、适不适合做老师 2、写的文章值不值得付费。我很关注这两个问题。
正文开始。
———–
kafka是一个消息队列,没有接触过的觉得单就消息队列这个词都比较难理解,比喻一下,消息队列就像一个大桶,左边一个人往里面塞数据,右边一个人取数据。塞 —-> kafka —-> 取,也就是生产-消费者模式。
kafka是用Java写的,像个小程序,和我们平常写的服务器一模一样,监听端口,充当服务器的角色。如果你要收发数据,就要用kafka的客户端,也可以称为API,为什么呢?仅仅就因为它通信时有自己的一套TCP协议,只有它自己能懂。
存数据
首先,我们站在塞的这一方,其实有很多问题,我们一个一个说。比如一直往里面塞,到什么时候是尽头呢?显然,这个问题是和存储有关系的,也就是说磁盘有多大它就能塞多少。
接着是第二个问题,我把数据塞进去了,数据怎么摆放呢?你要说它是数据库,它好像又不像MySQL那样使用树做成复杂的结构,其实它就是把数据存到文件(file)里面进行线性的存储,目标就是查找快。举个例子说,你写的服务器会产生日志,一会在硬盘上创建一个log1.txt,过一会又创建一个log2.txt,数据越来越多,这样的日志文件也越来越多。kafka也是一样,当生产者往里面塞数据的时候,这个数据也要在磁盘持久化一下,所以也会产生一个一个的文件,原理相似。
如下图,是具体的数据存储:
0 ■
1 ■
2 ■
3 ■
…
左边的0,1,2,3称为偏移,就像数据库的id一样,一直单调增加,范围是int64。假如每秒百万个消息(高并发),也要20万年,所以这个序号就是使劲的增也用不完,更何况我们99%的公司都没有这个流量。
现在模拟一下操作,小明往里面塞了三条数据 :苹果、香蕉、桔子,结果应该是:
0 苹果
1 香蕉
2 桔子
———–
塞的一方我们大概理解了,总结:
1.每存一条数据就生成一个偏移值,如此反复。
2.就算for循环放开往里面塞数据也是安全的,只要磁盘容量足够大,序号是用不完的,也即可以无限塞数据。
取数据
现在,我们将视角转到取的这一方(消费者或称为客户端的一方)。
既然发送的数据是按0,1,2这样的整数进行偏移的,我去取数据的时候,就可以指明从哪个位置开始,合情合理。比如我告诉kafka:从偏移1处开始取,那么得到的就是香蕉和桔子。当然,也可以从最开始的地方(0)取,那么得到的就是全部的数据。类比编程就像C语言的文件指针,可以跳来跳去。
当我把数据全部取完的时候,那么偏移就变成3了,由于没有数据,我方就阻塞了,可以看出这也是计算机运行的常态形式,伪码如下:
for 遍历管道{ msg:=xx //处理 }
如果有数据就得到消息进行处理,没有消息就阻塞在for循环中。
消息要放多久?
取的这一方可能也会想,我把数据消费了就将数据删除让kafka释放空间不是很好,其实这涉及到消息队列的设计思路。生产者存入的数据就是想共享给各方拉取处理,A取了数据并删除了数据,那么B,C,D,E到哪儿取数据呢?因此消息不涉及到删除,kafka会有一个过期时间,比如7天之后自动清理数据,我觉得这样做,就是确保各方能在一个宽裕的期限内把数据搬走,只要数据还在就可以重复搬,而具体过期是多少天可以修改配置,这些都是次要的。
总结
全文主要表达的是一种思想,这也是以后所有文章的风格,我们主要看思想。只要能掌握一个东西的思想,就能很快学会。
今天的总结:
- kafka是Java写的一个小程序,CS模式,监听端口9092。
- 可以无限往里面发数据,把for循环放开塞也没事,一般的家用电脑也有5000~2万的TPS。
- 当存储一条数据时,会将偏移量+1,怎么增加序号都用不完,约等于无限。
- 消费者可以无限取数据,当取完最后一条数据时阻塞了,直到有新数据产生。
- 无论是收还是发,都要用它的API,也就是所谓的客户端,各种语言版本的框架都会提供。
下一篇开始安装kafka,正式上手学习一下。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/177761.html