Kafka初识

第一次听到kafka还是在17年实习的时候,当时在一家外包公司,没错就是外包,不过后来呆了半个月就离职了。当时接触的是一个电信外包项目,主要是基于大数据做一个端到端的监控平台,还是实习的我第一次听到了kafka这个名字,不过由于那时还只是一个打酱油的实习生再加上并没有待多长时间,就没有深入了解它,来到第二家公司后再一次听见kafka,当时是一家做数字货币交易所的,就是类似比特币的虚拟货币,当时有一个OCR的实名认证接口需要用到kafka做异步,不过很可惜的是18年暴雷,公司资金链断裂开始裁员,转正还没一个月的我就又失业了。之后第三次入职,是一家做风控的创业公司,当时让我负责计费系统的设计,后来经过一系列插曲,又再次接触到了kafka,至此开始真正接触它了解它。现在准备把kafka系统性的学习一遍。

记得在第二家公司还发生过一个小插曲,当时一个开发人员在往kafka发送完消息之后,消费者无法消费到消息,最后找到CTO来解决,还被训了一顿,问题是因为当时那个开发人员在本地开了一个消费端,当消息发送到kafka后,被本地的消费了,开发环境没有消费到。这是个很常见的小问题,相信很多开发者都遇见过,不过不知道你们有没有被CTO给训一顿😂

阅读全文 »

Kafka学前准备

不知道大家在学习一门新的技术之前是怎么做准备的,不过我想每个人都会遇到过学习完一门知识长时间不接触会立马忘记的情况。就像我之前学的JVM和Redis一样,学习的时候对每个细节都非常了解,可是时间一长之后又会立马忘得一干二净,我觉得大多数人都无法避免这种现象,毕竟你没有过目不忘的本领。既然无法避免那就只能想办法可以快速的再次拾起,就像物理实验中的误差一样,不可避免只能降低。所以在此推荐大家每当学习一个新的知识点的时候,一定要做好学习前的规划以及笔记,不然到头来又是一场空。等到面试的时候再把它拿出来看看,其中重要的点着重回顾,我想一定会有所帮助。还有一点就是记笔记最好整理成博客放在自己的博客或者三方博客平台上,强迫自己把笔记写的自己能看懂外还要别人也能看懂,而且还能和别人一起交流经验,一起学习。

阅读全文 »

消息队列学习开篇

什么是消息队列?消息队列有哪些?又解决了哪些问题?该怎么选择消息队列?使用消息队列的时候会遇到哪些问题?带着这些疑问先对消息队列进行初步了解。

介绍

在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。
一个 WIMP 环境像是 Microsoft Windows,借由优先的某些形式(通常是事件的时间或是重要性的顺序)来存储用户产生的事件到一个 事件贮列 中。系统把每个事件从事件贮列中传递给目标的应用程序。 ——摘自维基百科

维基百科中的解释,但是总感觉一大串术语,又是进程又是通信的,还有各种设备什么的。对于小白来说就用最简单的一句话就行了,消息队列就是用来发送和接收消息的队列,发送消息方叫作生产者,接收消息方叫作消费者
不要纠结这些专业术语了,我们了解消息队列主要用来业务上的问题的,老是按照专业的角度去理解多费事,入门简单的了解它是干什么的解决了什么问题就行了😜

阅读全文 »

Redis淘汰机制

说到Redis的内存淘汰机制,突然我联想到之前上大学时候的手机内存不够用的问题。记得那时候买的是16G的5s,🍎手机都知道,非常耐用,用了四年都不卡,所以手机里存了大量的东西,导致手机经常提示内存不够用。我就经常删除手机里的图片,当时我的策略就是将手机里最不重要的照片以及很少会用到的照片删除掉,现在想想当初买手机的时候真应该买内存大一些的了。其实这里我删除手机照片的思考方式就有点类似Redis的内存淘汰机制了。

删除策略

  • 定时删除:在设置键的过期时间的同时,创建一个定时器 timer). 让定时器在键的过期 时间来临时,立即执行对键的删除操作。
  • 惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查取得的键是否过 期,如果过期的话,就删除该键;如果没有过期,就返回该键。
  • 定期删除:每隔一段时间程序就对数据库进行一次检查,删除里面的过期键。至于要 删除多少过期键,以及要检查多少个数据库,则由算法决定。

淘汰策略

Redis的内存淘汰机制就是为了淘汰掉一些数据,保证Redis的正常服务。可以通过在配置文件中添加maxmemery-policy选择不同的淘汰策略,具体的策略有以下几种:

  • noeviction 不进行任何淘汰操作,当内存不够时写命令会报错
  • allkeys-lru 在所有的key中查找最近最少使用的key进行淘汰
  • volatile-lru 在设置过期时间的key中查找最近最少使用的key进行淘汰
  • allkeys-random 在所有的key中随机移除某个key
  • volatile-random 在设置了过期时间的key中随机移除某个key
  • volatile-ttl 在设置了过期时间的key中,删除过期时间最早的key
  • allkeys-lfu 在所有的key中查找最近访问频率最低的key进行淘汰(4.0版本)
  • volatile-lfu 在设置过期时间的key中查找最近访问频率最低的key进行淘汰(4.0版本)

备注
这里删除的key其实只删除一个,这是因为Redis在执行具有申请内存的命令时,会先判断内存是否超过maxmemery,如果超过了就会基于设置的maxmemery-policy策略删除key。

阅读全文 »

Vim命令

今天在公司领导问了个vim的命令,当时脑子一片空白,一时间语无伦次,场面甚是尴尬,真是书到用时方恨少啊!😰
作为一名后端开发,在日常开发的过程中肯定会接触到使用vim快捷命令,基本上都是用到的时候直接度娘,虽然会接触到一些常用的vim命令,毕竟不是运维,过段时间基本上会再次忘掉,下次在遇见的时候再度娘。期间难免会耽搁不少时间,但是我觉得特地学一下vim,又感觉有点力不从心,上班不比上学,不是每天都可以划水。最后想了下觉得应该把用到的vim命令记录下来,方便下次查阅,后面有时间的时候也翻一下,就当做记单词了吧。

阅读全文 »