本文致力于写一篇非技术人员也能看懂的kafka术语介绍。
kafka是一个消息引擎系统,它可以传递消息,也具有转换消息的能力,对于今天的主题来说,我们关注传递消息的能力就够了,因为我们一般接触到的术语都跟传递消息的功能有关。
文末有一个本文介绍的术语的列表,对kafka有一些了解的可以先看一下,有助于对文章的内容有一个全局的印象。

1. Kafka的基本结构

如果一个系统可以用来传递消息,那么它肯定有发送者和接收者,接收者消费发送者发来的消息,因此也可以叫做消费者。

kafka中发送者的角色对应着producer这个概念,消费者的角色对应着consumer的概念。

我们经常可以听到kafka服务器这样的概念,服务器可以叫做kafka server。如果有服务端,就说明它是客户端服务器模式的。

那么客户端是什么呢?就是刚刚我们介绍过的producer和consumer。客户端和服务器交互的方式如下图。

producer给broker发送数据,这些消息会存到kafka server里,然后consumer再向kafka server发起请求去消费这些数据。
kafka server在这个过程中像是一个帮你保管数据的中间商。所以kafka服务器也可以叫做broker(broker直接翻译可以是中间人或者经纪人的意思)。

2.Kafka存在的意义

为什么producer的数据不直接发给comsumer,需要在中间加一个“中间人“呢?引入中间人的好处主要有两个,一个是缓冲流量,另一个是松耦合。

  • 缓冲流量:
    上游的消息传递到下游,如果这个量很大很突然,下游系统一下子又处理不了这么多的数据,那么这些高发流量,可能会让脆弱的下游系统崩溃,此时引入消息引擎做一个缓冲,下游系统可以按自己的能力去消费消息,这有点像大坝能蓄水防洪的功能。

  • 松耦合
    松耦合是因为kafka提供异步的传输方式,简单介绍一下异步传输的概念。
    同步传输指上游给下游发消息,下游处理完消息后将结果返回给上游,然后上游再继续发消息。所以这种方式是需要下游马上去处理的,上游是要等待的(被阻塞了)。

    而异步方式就不一样,上游给kafka发完消息,下游可以稍后再去消费和处理这个消息。

    这样的上游生产者的逻辑就不会直接依赖下游消费者的逻辑了,因此上下游系统的代码不会直接依赖了,这就是松耦合。所以在微服务架构中,消息引擎经常被用来做服务的解耦。

3.kafka消息模型

消息引擎常见的消息模型有两种,一种是点对点模型,另一种是发布者/订阅者模式

  • 点对点模型
    发送者将消息发送到消息队列中,消费者去消费,如果消费者有多个,他们会竞争地消费,也就是说对于某一条消息,只有一个消费者能“抢“到它。类似于火车站门口的出租车抢客的场景。

  • 发布/订阅者模型
    发送者将消息发送到一个topic(主题),消费者去消费这个主题。消费者之间是独立的,不会互相竞争,如果消费者有多个,他们都可以消费到同一条消息。有点像报社发布报纸和民众买报纸的场景

kafka支持以上的两种模型,在发布/订阅者模式中,发布和订阅的对象是topic,我们可以为每个应用或者每类数据创建专门的topic。向topic发送消息的客户端应用叫做producer,producer可以向多个topic发送消息。相应的,消费topic消息的客户端应用叫做consumer,comsumer也可以同时接受多个topic的消息。

为了提高发布/订阅者模型中消费者的消费能力,kafka引入了consumer group(消费者组)的机制,多个消费者组成一个consumer group来共同消费topic的消息。
对于topic的一条消息,每个消费者组都可以消费,但是消费者组内只有一个消费者能消费。消费者组和消费者组之间是独立的,没有竞争关系,消费者组内部有竞争关系,这有点像点对点模型和发布/订阅者模型的结合。

3.1 kafka保证高可用性的机制

一般来说,我们不会只部署一台broker,因为万一这台机器挂掉了,服务就不能提供服务了。我们一般会部署一堆broker来保证服务的高可用性,同时我们也不会把多个broker部署在同一台机器上,否则一台机器挂掉会影响几个broker服务进程。

一堆broker组成了kafka集群。而集群是需要管理的,它借助zookeeper来管理的,这也就是为什么kafka依赖于zookeeper的原因。

实现高可用性还有一个机制:备份机制。kafka拷贝相同的数据到不同的机器上,这样如果一台机器挂了,还有备份数据在。备份的副本叫做replica,副本的数量是可以配置的。
备份可以分为leader replica(领导者副本)和follower replica(跟随者副本),leader replica只有一个,它跟客户端进行交互,follower replica负责同步leader replica的状态,不客户端进行交互。

3.2 kafka保障伸缩性的机制

有了备份机制,kakfa可以保证对数据的持久话不会丢失。但是面临着一个问题,leader replica的数据太多了超过了单台broker的容纳能力了怎么办?kafka的解决办法是分割这些数据,把它们分到不同的broker里。这个机制叫做分区机制(partitioning)。
kafka将每个topic分成多个partition(分区),每个partition是一个有序的队列,produer的消息只会进入到一个partition。这个消息在partition中的位置叫做offset(位移),offset往往从0开始计数。
而刚刚提到的replica是对partition的replica,而不是对于topic的replica。所以最后的结构是这样的:

正文到此结束,希望大家喜欢,也欢迎大家一起交流和提出建议。

本文介绍了的术语列表概览

  • server相关
术语 中文释义 解释位置
broker 理解为服务器即可 1.kafka架构
topic 主题 3.kafka消息模型
partition 分区 3.2 kafka保障伸缩性的机制
offset 位移 3.2 kafka保障伸缩性的机制
replica 副本 3.1 kafka保证高可用性的机制
leader replica 主副本 3.1 kafka保证高可用性的机制
follower replica 从副本 3.1 kafka保证高可用性的机制
  • client相关
术语 中文释义 解释位置
producer 发送者 2.kafka架构
consumer 消费者 2.kafka架构
consumer group 消费者组 3.kafka消息模型

参考资料

  1. 极客时间《kafka核心技术与实战系列》
  2. 分布式消息队列详解:10min搞懂同步和异步架构等问题

[kafka]kafka术语白话相关推荐

  1. [Kafka] Kafka基本架构

    [Kafka] Kafka基本架构 [Kafka] Kafka基本架构 [Kafka] Kafka基本架构 生产者Producer :生产信息: 消费者Consumer :订阅主题.消费信息: 代理B ...

  2. kafka相关术语及消息分配策略

    相关术语 从集群模型上说: broker: kafka集群中的每一个存储节点,用来持久化存储消息队列的. 可以自定义存储时间.可以保证消息的安全性(重用性:消费者可以重新消费信息 Broker没有副本 ...

  3. Kafka : Kafka入门教程和JAVA客户端使用

    目录 目录 Kafka简介 环境介绍 术语介绍 消费模式 下载 集群安装配置 命令使用 JAVA实战 参考文献 Kafka简介 由Scala和Java编写,Kafka是一种高吞吐量的分布式发布订阅消息 ...

  4. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  5. linux上卸载kafka,kafka安装在linux上的安装

    kafka安装 第一关 java的安装 捞得嘛,不谈 第二关 zookeeper的安装及配置 1. 直接打开Apach zookeeper进行下载 Tips: source 是源文件,需要编译后才能继 ...

  6. 部署kafka kafka的service容器和zookeeper kafka客户端 Elasticsearch的客户端

    创建network docker network create -d overlay --attachable loc_net   docker stack up -c  kafka.yml kafk ...

  7. [kafka]kafka集群实践

    环境 ip hostname server_id 192.168.1.111 UAT04 2 192.168.1.112 UAT03 1 192.168.1.102 UAT05 3 配置hosts: ...

  8. [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析

    High Level Consumer 很多时候,客户程序只是希望从Kafka读取数据,不太关心消息offset的处理.同时也希望提供一些语义,例如同一条消息只被某一个Consumer消费(单播)或被 ...

  9. 【kafka】kafka Kafka分区leader迁移

    1.概述 本篇文章是:https://articles.zsxq.com/id_7srom6n6b947.html 文章的读后感,文章中写的不详细,想做一个详细的案例. 2.原文 月 2021年10月 ...

最新文章

  1. 如何将github上的 lib fork之后通过podfile 改变更新源到自己fork的地址
  2. 【PP操作手册】工程变更创建的创建
  3. 时间管理-暗世界-时间碎片
  4. 摩托罗拉:未来一切以手机为中心
  5. 北京科技计算机与通信工程学院,北京科技大学计算机与通信工程学院-任超
  6. a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...
  7. 今天开始清理个人计算机资料了
  8. 搭建 S3C6.410 开发板的 测试环境
  9. 详解Python正则表达式基础操作
  10. matlab imfilter函数,Matlab中fspecial函数 和imfilter函数的用法
  11. android手机脱网分析,网络营销-13款手机浏览器分析(Android).pptx
  12. 【Web】Excle题库抽题组卷在jsp显示
  13. 利用comtypes.client批处理dwg文件(AutoCAD二次开发Python)
  14. protobuf官方文档学习
  15. 视频教程-EXCEL VBA编程(excel办公高手必经之路)-Office/WPS
  16. kafka-topics.sh java.rmi.server.ExportException: Port already in use: 5555
  17. 7-1 最长公共前后缀
  18. 5W3H法与SMART原则的结合使用
  19. ROS仿真笔记之——gazebo配置velodyne
  20. plotly | python可视化进阶之路

热门文章

  1. 计算文件及字符串的VBS脚本
  2. OpenCV中的Shi-Tomasi角点检测器
  3. Git提交代码失败: empty ident name (for ) not allowed
  4. 详解GAN代码之搭建并详解CGAN代码
  5. 华为手机忘了密码,怎样强制刷机呢?
  6. 打怪升级记录(2018-2019)
  7. 图解三次握手与四次挥手
  8. python等于号前后一定要加空格吗_英语标点前后要加空格吗?
  9. 十一、mysql连接查询
  10. 了解模型预测控制2--什么是模型预测控制(MPC)