何鑫个人博客

从零开始之消息队列Kafka(一)

  • 2021-07-14 21:00:39
  • 技术
  • 139

专题的开始

最近总碰见问消息队列相关的相关问题,我接触的最早的消息队列是ActiveMQ,与之相关的业务也主要是用于一些发送短信,发送邮件这一类的场景,也没有玩过一些比较高级的用法,后来分布式系统越来越火,消息中间件的运用范围也就更加广泛了,什么流量削峰,分布式事务等等,听起来很高大上,却也没有实际玩过,同时,各种消息中间件也越来越多,功能也越来越复杂,比如RabbitMQ,Kafka,阿里的RocketMQ之类的,各有所长,所以闲暇之余,也得跟上时代的步伐,研究研究相关的技术,就这样就寻思开一个专题,记录一下自己的学习历程,就当做个学习笔记,当然如果能对其他人能有些帮助那就更好了,这里选取了比较流行的kafka作为学习的对象,其他的应该也能触类旁通,道理都是一样的,以上。

Kafka介绍

Kafka原是Linkedin公司开发的用scala(类似于Java,在JVM上运行)编写的一个消息中间件,后来开源并捐给了Apache,官网是这样介绍的:

Apache Kafka is an open-source distributed event streaming platform used by thousands of companies for high-performance data pipelines, streaming analytics, data integration, and mission-critical applications.

翻译成中文就是:Apache Kafka是一个被数千家公司用于高性能数据管道、流分析、数据集成和关键应用的开源分布式事件流平台。
我们暂且不用关注其中一些名词的意思,我们只需要知道它被广泛应用,支持分布式,高性能其高可用,官网甚至这样介绍:

More than 80% of all Fortune 100 companies trust, and use Kafka

反正牛就完事了。

一些需要知道的概念

我们先简单了解一下Kafka中的一些相关概念。

  • 生产者Producer和消息者Consumer:消息队列一般都基于生产消费者模型,一个客户端推送消息到服务器,另一个客服端订阅相关消息进行消费。
  • 服务代理节点Broker:所有消息会发送给服务代理节点,由服务代理节点进行消息管理,多个Broker构成一个Kafka集群,提供高性能高可用的消息服务。
  • 主题Topic:每个消息都会有一个主题,用于一类消息。
  • 分区与副本:分区和副本主要是解决高可用的问题,一个主题可能会有多个分区,但每个分区只有一个主题,分区可能分布在不同的Broker上,副本分为leader和follower,一般消息处理都是在leader上处理,follower会同步leader的数据,但可能会存在延迟,leader不可用时会重新选举leader以保证服务的可用性。