kafka 第一次小整理(草稿篇)————分发的基本思路[三]
前言
简单整理一下分发的基本思路。
正文
kafka 原本是做日志管理系统,主要是分发这块的。
那么如何做分发呢?
分发的是什么呢? 分发的其实是日志,日志是事件状态,kafka 内部就叫做Record,也就是记录哈,也可以叫做事件状态的记录,其实和日志的意思差不多了。

首先需求是有分类的,要给record 进行分类,这个分类就用topic。每个分类有自己的topic。
然后就是怎么存的问题了。
首先最容易想到的是下面这种:

一个队列,往队列里面存就好,然后另外一端进行消费就好。
这样又一个问题,那就是分发的需求是不止能分发一个,还要分发很多个消费者。
那么就不能是队列,因为队列消费掉就没了。
那么想到的就是数组。

为什么是数组呢?
因为数组有索引,多个消息者要需要记住自己消费到什么地方了。
这个就是消费者位移,表示消费者的消费进度,每个消费者都有自己的消费者位移。
有了这个消费者位移后,消费者得告诉自己叫什么吧,消费者不得给个名字啊,不然谁知道呢?

那就变成了上面这样。
似乎这样就能满足需求了。
然后运行起来发现一个问题,那就是生产在大多数情况下,是会形成堵塞的。
因为这样还是一个可能多个生产,但是一个消费的情况。即使生产一个,消费一个(这里只消费名相同),那也肯定是达不到,因为报告一件事情容易,解决一件事情困难。
那么能不能这样呢?
那么下一个想法就是能不能增加消费速度呢?

上面就是有多个consumer name 为consumer1的同时进行消费。
这里且不管实现难度哈,单纯概念。假如有多个consumer1 可以同时进行消费,且不会消费到相同的,这样就增加了消费速度。
那么这就是一组consumer,那么得给这个组改个名字,叫做consumer group。
这样似乎是没有问题了,虽然这样实现比较复杂,但是能实现。
上面这种想法也是能实现的,比如说有一个consumer group 里面的取个一条数据,已经消费的标记为消费,如果消费了,offset 继续偏移就好,不需要消费。
但是这样有一个问题,这里不谈及到任何实现困难上,那就是不能保证消费顺序。
在现实中我们收到的新闻是有时间顺序的,但是这样消费的是没有顺序的。
比如说,最近俄乌战争,加入你先收到的是俄乌战争结束了,然后收到俄乌战争开始了,懵逼不。(讲过实际中的例子,如果无法保证消费顺序的话,比如说一个命令是开机一个命令是关机,用户执行的是先关机再开机,那么如果开机和关机命令是相反的,可想而知效果完全不同)
这是不是很不科学啊。所以这样做是不符合现实世界的,计算机世界现在是帮助我们解决现实世界的问题。
这样是不符合需求的。那么既然,消费者增加不可靠,那么可以这样。

那就按照上面这样,增加topic,细化。
比如战争新闻,分为叙利亚的、阿富汗的等。
这样不就ok了呀。
这样的确可以哈,消费者和生产者。
但是呢,扩展性很差,需要很多个topic,每增加一个都需要增加一个topic,无论是对于code 还是 对于业务都困难。
那么能不能合成一个topic呢?
不知道有没有看过actionblock 或者channel 这种异步方式,这种管道模式就是一个入口,处理管道。

这里设置多跟管道,kafka里面叫做分区。
然后每个分区里面只能被一个消费者消费,这是为了保证record的顺序,前文已经提及到了。
然后考虑下一个问题,这里是一个消费者对于一个分区。 且一个分区只能被一个消费者里面的一个分区消费。
这样设计依然存在瑕疵。
有多个消费组,有些消费组需要的record 很多,有些只是取其中很少部分。举个例子,比如说战争新闻,有些消费组只关系俄乌关系,其余消息不做处理,进行过滤。
那么这个消费组消费的就很快,那么这个消费组里面就不需要这么多的消费者。所以肯定不能设计成一对一的关系。
那有没有可能设计一个消费组里面的一个消费者消费多个分区呢? 这也是可以的。这个时候就有处理一个消费组里面的消费者要覆盖这个topic全部分区的情况。那么就要考虑如果增加了一个消费者如何处理,如果一个消费组下线(无论是掉线还是业务需求)如何处理。
至此差不多就是kafka的基本雏形。如果没有接触异步编程,那么的确很难想到kafka这种模型,如果知道actionblock 或者channel 这种,但是更能理解了。
结
至此,简单分析了一个kafka的分发模型,下一节kafka是如何设计高可用的。以上只是个人理解,如有错误,望请指出。
kafka 第一次小整理(草稿篇)————分发的基本思路[三]的更多相关文章
- kafka 第一次小整理(草稿篇)————演变[二]
前言 简单整理一些kafka的设计. 正文 前文提及到log 的重要性,以及kafka在其中的作用,起着一个日志管理分发的作用,对于其他服务来说相当于新闻报社,订阅某种主题就会收到某类信息. 当人们意 ...
- kafka 第一次小整理(草稿篇)————整理一下自己的认知
前言 简单整理一些自己使用kafka的一些感受. 正文 一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影. 计算机世界有一个重要的东西,那就是数据库. 数据库记录着真实世界发生了什么,准确 ...
- 微信小程序笔记整理--入门篇。
7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...
- java 开发面试题小整理(一)
本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...
- 微信小程序实战篇:商品属性联动选择(案例)
本期的微信小程序实战篇来做一个电商网站经常用到的-商品属性联动选择的效果,素材参考了一点点奶茶. 效果演示: 商品属性联动.gif 代码示例 1.commodity.xml <!-- < ...
- Unite 2017 干货整理 优化篇
Unite 2017 干货整理 优化篇 2017年05月16日 将Unite 2017的一些演讲做了整理. 本篇有内存,CPU.GC.UI.渲染性能指标.Tips几个小节. 内容持续整理中. 内存 ...
- Unite 2017 干货整理 同步篇
http://www.kisence.com/2017/05/17/unite-2017-gan-huo-zheng-li-tong-bu-pian/ Unite 2017 干货整理 同步篇 2017 ...
- 真的,kafka 入门看这一篇准没错!
什么是 Kafka Kafka 是一个分布式流式平台,它有三个关键能力 订阅发布记录流,它类似于企业中的消息队列 或 企业消息传递系统 以容错的方式存储记录流 实时记录流 Kafka 的应用 作为消息 ...
- 我的微信小程序第二篇
在上一篇<我的微信小程序第一篇(入门)>中,很多人问我什么是微信小程序,在这里我要说一下这个是我的失误啦,我默认大家都知道微信小程序,其实可能行内人士都知道小程序,好多非行内朋友可能平时不 ...
随机推荐
- 让我一时不知所措 Linux 常用命令 爱情三部曲 下部
Linux目录与文件管理 我试着把你忘记,可总在夜里想你~ 1.linux目录结构 2.查看及检索文件 3.压缩及解压缩文件 4.vi文本编辑器 1.Linux目录结构:树形目录结构根目录:所有分区, ...
- 【论文总结】Zero-Shot Semantic Segmentation
论文地址:https://arxiv.org/abs/1906.00817 代码:https://github.com/valeoai/ZS3 一.内容 Step 0:首先使用数据集(完全不包含 Un ...
- Solution Set -「LOCAL」冲刺省选 Round XXII
\(\mathscr{Summary}\) 和出题人很有缘分但是没有珍惜.jpg A 题有一个显然的二维偏序斜率式,以及显然的 CDQ 套李超树 \(\mathcal O(n\log^2n)\ ...
- Solution -「USACO 2020.12 P」Spaceship
\(\mathcal{Description}\) Link. Bessie 在一张含 \(n\) 个结点的有向图上遍历,站在某个结点上时,她必须按下自己手中 \(m\) 个按钮中处于激活状态 ...
- Solution -「LOCAL」逃生
\(\mathcal{Description}\) 有 \(n\) 个人掉进了深度为 \(h\) 的坑里,第 \(i\) 个人的肩高为 \(a_i\),臂长为 \(b_i\).设当前坑里人的集合为 ...
- MySQL架构原理之存储引擎InnoDB_Redo Log和BinLog
Redo Log和Binlog是MySQL日志系统中非常重要的两种机制,有很多相似之处同时也有差别,本文探究两者细节和区别. 一.Redo Log 1.Redo Log介绍 Redo:顾名思义就是重做 ...
- Spring Security即将弃用WebSecurityConfigurerAdapter配置类
用过WebSecurityConfigurerAdapter的都知道对Spring Security十分重要,总管Spring Security的配置体系.但是马上这个类要废了,你没有看错,这个类将在 ...
- 关于 Xcode 更新 appleID 更换
可能不少人会遇到 前一位同事走之后,他的 appID帐号下载的东西更新不了 下面给予大家一个解决办法 例如 Xcode 1.打开引用程序目录 2.找到Xcode,右键"显示包内容&quo ...
- ios开发 Rsa签名 base64转码
因为公司要求做了一个加密 网上的资料少有可用的 于是我看到了一位大神的曙光 但是未介绍使用方法 然后另一位大神给予了使用方法 但是没有把库给出来 我整理了一下 希望大家看的有些启发 证书生成 ...
- 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用
在C#中实现的基于外观或门面模式打造的业务应用案例 以前一直没有想过写一些东西来把项目中用到的知识点及技术实现做一个归纳整理并分享出来.现在打算逐渐的把项目中的一些东西整理并分享出来,与大家共勉! 外 ...