[kafka]kafka术语白话
本文致力于写一篇非技术人员也能看懂的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消息模型 |
参考资料:
- 极客时间《kafka核心技术与实战系列》
- 分布式消息队列详解:10min搞懂同步和异步架构等问题
[kafka]kafka术语白话相关推荐
- [Kafka] Kafka基本架构
[Kafka] Kafka基本架构 [Kafka] Kafka基本架构 [Kafka] Kafka基本架构 生产者Producer :生产信息: 消费者Consumer :订阅主题.消费信息: 代理B ...
- kafka相关术语及消息分配策略
相关术语 从集群模型上说: broker: kafka集群中的每一个存储节点,用来持久化存储消息队列的. 可以自定义存储时间.可以保证消息的安全性(重用性:消费者可以重新消费信息 Broker没有副本 ...
- Kafka : Kafka入门教程和JAVA客户端使用
目录 目录 Kafka简介 环境介绍 术语介绍 消费模式 下载 集群安装配置 命令使用 JAVA实战 参考文献 Kafka简介 由Scala和Java编写,Kafka是一种高吞吐量的分布式发布订阅消息 ...
- [Big Data - Kafka] kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...
- linux上卸载kafka,kafka安装在linux上的安装
kafka安装 第一关 java的安装 捞得嘛,不谈 第二关 zookeeper的安装及配置 1. 直接打开Apach zookeeper进行下载 Tips: source 是源文件,需要编译后才能继 ...
- 部署kafka kafka的service容器和zookeeper kafka客户端 Elasticsearch的客户端
创建network docker network create -d overlay --attachable loc_net docker stack up -c kafka.yml kafk ...
- [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: ...
- [Big Data - Kafka] Kafka设计解析(四):Kafka Consumer解析
High Level Consumer 很多时候,客户程序只是希望从Kafka读取数据,不太关心消息offset的处理.同时也希望提供一些语义,例如同一条消息只被某一个Consumer消费(单播)或被 ...
- 【kafka】kafka Kafka分区leader迁移
1.概述 本篇文章是:https://articles.zsxq.com/id_7srom6n6b947.html 文章的读后感,文章中写的不详细,想做一个详细的案例. 2.原文 月 2021年10月 ...
最新文章
- 如何将github上的 lib fork之后通过podfile 改变更新源到自己fork的地址
- 【PP操作手册】工程变更创建的创建
- 时间管理-暗世界-时间碎片
- 摩托罗拉:未来一切以手机为中心
- 北京科技计算机与通信工程学院,北京科技大学计算机与通信工程学院-任超
- a算法和a*算法的区别_机器人路径规划算法,全局路径规划与局部路径规划究竟有哪些区别?...
- 今天开始清理个人计算机资料了
- 搭建 S3C6.410 开发板的 测试环境
- 详解Python正则表达式基础操作
- matlab imfilter函数,Matlab中fspecial函数 和imfilter函数的用法
- android手机脱网分析,网络营销-13款手机浏览器分析(Android).pptx
- 【Web】Excle题库抽题组卷在jsp显示
- 利用comtypes.client批处理dwg文件(AutoCAD二次开发Python)
- protobuf官方文档学习
- 视频教程-EXCEL VBA编程(excel办公高手必经之路)-Office/WPS
- kafka-topics.sh java.rmi.server.ExportException: Port already in use: 5555
- 7-1 最长公共前后缀
- 5W3H法与SMART原则的结合使用
- ROS仿真笔记之——gazebo配置velodyne
- plotly | python可视化进阶之路