kafka 第一次小整理(草稿篇)————演变[二]
前言
简单整理一些kafka的设计。
正文
前文提及到log 的重要性,以及kafka在其中的作用,起着一个日志管理分发的作用,对于其他服务来说相当于新闻报社,订阅某种主题就会收到某类信息。
当人们意识到事件状态的重要性的时候,当时还没有日志管理系统,可能像下面这样:

他们各自传递着各自的事件状态给需要的服务,有点乱且难以维护。
于是为了给他们解耦,就出现了下面这样的:

这种模式解决了日志分发问题。
这种模式的出现是否解决了各种服务之间日志的共享。
现在日志和数据库似乎没有什么关联了,也就是事件状态的出现满足了新的需求,并没有和事物的状态有什么影响,似乎这两者在并行的发展。
在事物状态历史发展中,出现了一种东西叫做也就是数据仓库。
通过清洗业务仓库里面的东西来进行对聚合整理,这个清洗过程叫做etl,也就是extract-transform-load.
顾明思议哈,收集、转换、加载。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据, ETL是BI(商业智能)项目重要的一个环节。
这东西有什么作用呢,比如说,要查询进一个月每天的订单,如果直接这样查的话,一个是数据库语句难写,有人可能会问怎么就难写哈,不就是group by 聚合吗,但是还有一个问题那就可能有一天没有订单哈。
第二个问题就是性能消耗大,假如订单多的话,做group by 也是很损耗的。 elk 可以做一些简单的工作,比如说每天统计一次订单数量,然后查询的时候复杂度就很低了,现在的数据库设计更偏向于设计更加简单的数据表,而不是写复杂的语句,语句写的复杂更多的可能是数据库设计问题。
数据仓库对于分析很有作用。但是传统的数据仓库有一个问题,那就是一般清洗过程是定时去业务数据库里面取数据哈。
且不从技术层面上考虑性能问题, 有一个问题就是时效性,也就是说无法对现有的数据进行监控。
然后还有另外一个问题,似乎数据仓库是一个独立的服务了,和其他服务脱钩了,取数据也是直接面向数据库,处理的结果也无法反馈到其他服务中去。
数据仓库服务,似乎成了业务孤岛。那么怎么协调他们呢,日志系统去协调他们。

各自的服务发送各自的事件进入日志系统,elk 订阅这些进入到数据仓库中,数据仓库又反馈给自动化营销服务中。
这也对服务提出了新的需求了,也就是数据的发布者。 比如说用户的退款,那么产生的事件里面有: 订单id 用户id 退款时间,这样似乎就能对这件事情的状态有了描述了。
但是更多的是在发布的时候就进行了清洗,里面的事件里面有: 订单id 用户id 订单金额 退款金额 退款商品 退款数量 退款时间等(什么人在什么地点干了一件什么事) 这些清洗好的数据,这样elk 的负担相对小很多,如果需要查询商品的退款情况,就很明白了。
而对于市场服务的性能上也没有很大的问题,因为在退款上本来就要查询订单,顺便清洗。对于扩展性,如果有新的服务,那么可以定义新的数据模型发布即可。
这些也就是事件驱动了,事件驱动是指在持续事务管理过程中,进行决策的一种策略,即跟随当前时间点上出现的事件,调动可用资源,执行相关任务,使不断出现的问题得以解决,防止事务堆积。在计算机编程、公共关系、经济活动等领域均有应用。
事件驱动达到了很好的解耦的目的,比如说商家订单支付完,然后要进行骑手送餐,市场服务只需要完成自己的事情即可,然后发送事件到kafka即可。
那么对于日志业务的可扩展性,kafka 是能满足的。
需求基本满足了,通过这种日志的订阅发布是可以达到需求的。
那么就开始考虑到实际情况,各个服务的日志是很庞大的,那么是否kafka能满足呢?
最简单的一个问题,就是生产和消费的速度很有可能不一致。很有可能就是生产要大于消费,可能远大于。
毕竟生产没啥业务逻辑,消费的时候可能就要复杂的业务逻辑了。
故而kafka 一个主题可以有多个分区:

且每个分区的消费都是顺序的。
后来又出现了流处理,那么什么是流处理呢?
上面介绍了,有了日志系统后将数仓业务和线上业务打通了,业务服务有也承担着一部分清洗功能。
但是面对着大量的数据,可能就处理不过来,有hadoop 这种这种是批处理程序,但是无法到达实时。
比如说可能能达到这个用户几天没有续费,然后发个问卷调查,但是无法达到下面这种。
达不到用户如果连输输了15把,给一张优惠券的目的,用户赢了10把,匹配更强对手的战略营销。
尤其是赢了10把,下一把匹配更强了,这就需要计算实效非常高。
为啥有专门的流处理呢? 自己写个服务进行处理不是也挺好吗。其实自己写服务达到流处理,也是可以的呀,但是可能面对数据太大,撑不住啊,但是只能说人家更专业,在低延迟、高吞吐、结果和准确性和良好的容错性上。
然而最关键的不是处理能力问题,而是流式处理是一门学问。
那么为什么hadoop 一开始不做成这种流式的呢? 是不是当时就没有这个需求呢。 肯定是有需求的,不然后面也不会出现流处理。那到底是什么问题呢?仅仅是处理能力的问题吗? 这就是流式的学问了。
结
下一节正式kafka 整理。
kafka 第一次小整理(草稿篇)————演变[二]的更多相关文章
- kafka 第一次小整理(草稿篇)————整理一下自己的认知
前言 简单整理一些自己使用kafka的一些感受. 正文 一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影. 计算机世界有一个重要的东西,那就是数据库. 数据库记录着真实世界发生了什么,准确 ...
- kafka 第一次小整理(草稿篇)————分发的基本思路[三]
前言 简单整理一下分发的基本思路. 正文 kafka 原本是做日志管理系统,主要是分发这块的. 那么如何做分发呢? 分发的是什么呢? 分发的其实是日志,日志是事件状态,kafka 内部就叫做Recor ...
- 前端面试题整理—JavaScript篇(二)
1.使用js实现一个可持续的动画 2.实现一个可以自由拖动的悬浮框 3.实现一个倒计时效果 4.使用js仿写一个原生下拉列表框 5.创建10个<a>标签,点击的时候弹出对应的序号 6.实现 ...
- 前端微信小程序实战篇
电商底部导航栏的制作 我想大家对电商一定不陌生,一般电商的底部导航栏有以下几个首页.分类.购物车.个人中心. app.json是用来配置page路径以及导航栏属性的,那我们要做首页.分类.购物车.个人 ...
- 小猪猪逆袭成博士之C++基础篇(二) 常量、处理类型、自定义头文件
小猪猪逆袭成博士之C++基础篇(二) const .auto. decltype 上一章我们介绍了一些常用的类型和常见的问题,下面再介绍一些学习的时候不是特别常用但是在实际工程中很有用的一些东西. 一 ...
- 工作经常使用的SQL整理,实战篇(二)
原文:工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实 ...
- [SQL SERVER系列]工作经常使用的SQL整理,实战篇(二)[原创]
工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着上一篇“工作经常使用的SQL整 ...
- 微信小程序笔记整理--入门篇。
7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...
- java 开发面试题小整理(一)
本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...
随机推荐
- UIImageView的序列帧动画
#pragma mark - 开始动画 - (IBAction)startAnimation { // 1.1 加载所有的图片 NSMutableArray<UIImage *> *ima ...
- LaunchScreen&LaunchImage
优先级:LaunchScreen > LaunchImage 在xcode配置了,不起作用 1.清空xcode缓存 2.直接删掉程序 重新运行 如果是通过LaunchImage设置启动界面,那么 ...
- js金额转中文大写
基础参数: var AIW_number = {0:'零', 1:'壹', 2:'贰', 3:'叁', 4:'肆', 5:'伍', 6:'陆', 7:'柒', 8:'捌', 9:'玖'} var AI ...
- 简述redis集群的实现原理
在哨兵sentinel机制中,可以解决redis高可用问题,即当master故障后可以自动将slave提升为master,从而可以保证redis服务的正常使用,但是无法解决redis单机写入的瓶颈问题 ...
- JavaScript 的DOM操作详解
内容概要 DOM之查找标签 基本查找 间接查找 节点操作 获取值操作 class操作 样式操作 事件 内置参数this 事件练习 内容详细 DOM操作 DOM(Document Object Mode ...
- Solution -「CF 510E」Fox And Dinner
\(\mathcal{Description}\) Link. 给定正整数集合 \(\{a_n\}\),求一种把这些数放置在任意多个圆环上的方案,使得每个环的大小大于 \(2\) 且环上相邻两 ...
- v79.01 鸿蒙内核源码分析(用户态锁篇) | 如何使用快锁Futex(上) | 百篇博客分析OpenHarmony源码
百篇博客分析|本篇为:(用户态锁篇) | 如何使用快锁Futex(上) 进程通讯相关篇为: v26.08 鸿蒙内核源码分析(自旋锁) | 当立贞节牌坊的好同志 v27.05 鸿蒙内核源码分析(互斥锁) ...
- php spl_autoload_register 实现自动加载
spl_autoload_register (PHP 5 >= 5.1.2, PHP 7) spl_autoload_register - 注册给定的函数作为 __autoload 的实现 语法 ...
- Eureka Server启动过程
前面对Eureka的服务端及客户端的使用均已成功实践,对比Zookeeper注册中心的使用区别还是蛮大的: P:分区容错性(⼀定的要满⾜的)C:数据⼀致性 A:⾼可⽤:CAP不可能同时满⾜三个,要么是 ...
- Oracle的常用命令和表空间
删除用户和表空间 ## 删除用户 drop user userName cascade; ## 如果用户无法删除,并报错: ## ERROR at line 1: ## ORA-01940: cann ...