Kafka初识

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

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

kafka版本变更

kafka的版本一直是我在学习时一件比较头疼的事情,首先是版本太多,其次就是版本号过于复杂,对于新手极其不友好,kafka最出的版本是0.几开头的,后期直接2.几开始,这这这...。在介绍每个版本的主要内容之前,还是先了解下版本的结构,kafka的版本一开始是三位,中间有过一段四位表示,后期又变为三位,四位的可以直接忽略前面的0。其实主要的结构还是没有改变,主要由major version、minor version、patch三个部分组成,也就是主版本、次版本、补丁。还有一个现象就是版本从0.8之后就会出现两个版本号中间用-间隔开,这种版本号-前面的是scala的版本,后面的才是kafka的版本。除此之外还有一个需要注意的地方,就是客户端的api,不同版本的客户端的api也会有很大的区别。

其实版本也不要过于纠结,毕竟设计人员在一开始并没有考虑那么多,只要知道个大概就行了,每个大版本有哪些重要更新内容就很不错了。

kafka版本 版本描述
0.7 最基础的版本,只提供基础的消息队列功能
0.8.0 加入了副本机制,做到了消息无丢失
0.8.2.0 引入了新版本的Produce API,不需要指定zk地址,但是不稳定
0.9.0.0 新增安全认证权限功能,并且Produce API也趋于稳定,Consumer API不稳定
0.10.0.0 引入了Kafka Streams,正式升级为流处理平台,但是不稳定
0.10.2.2 Kafka Streams更新,Consumer API趋于稳定,修复Produce API性能bug
0.11.0.0 新增幂等性Produce API以及Transcation API,Kafka消息格式重构
0.11.0.3 消息引擎功能非常稳定
1.x ~ 2.x Kafka Streams各种改进更新

kafka相关术语

在学习kafka之前最好先了解一下它的术语,相比redis,它的术语还是有很多的。

  1. Topic 主题,承载消息的逻辑容器,开发中经常用来区分业务
  2. Partition 分区,是topic中最小的物理单位,一个topic中可以含有多个分区,一个分区只能被同一个消费组中的消费者消费
  3. Consumer 消费者,消费消息的客户端,每个消费者都必须归属于一个消费组
  4. Consumer Group 消费者组,由消费者组成,当消费组中的消费者个数大于定于主题的分区数时则多余的消费者无法进行消费,反之,一个消费者可能消费多个分区中的消息。
  5. Producer 生产者,生产消息的客户端
  6. Consumer Offset 消费者位移,每一个消费者都会只有一个用来表示Topic中某个分区的消息消费进度
  7. Record Offset 消息位移,主题分区中的消息被消费的进度,是一个单调递增的值
  8. ReBalance 再均衡,当出现新消费者加入到组中或者旧消费者挂掉后都会发生再均衡,会重新分配主题中的分区。
  9. Replica 副本,在kafka集群中副本是用来为broker节点中的数据作备份的,副本分为leader副本和follow副本。
  10. ISR、AR
  11. HW、LEO、LSO、LW

kafka部署

kafka在部署的时候