前言

简单整理一些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 第一次小整理(草稿篇)————演变[二]的更多相关文章

  1. kafka 第一次小整理(草稿篇)————整理一下自己的认知

    前言 简单整理一些自己使用kafka的一些感受. 正文 一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影. 计算机世界有一个重要的东西,那就是数据库. 数据库记录着真实世界发生了什么,准确 ...

  2. kafka 第一次小整理(草稿篇)————分发的基本思路[三]

    前言 简单整理一下分发的基本思路. 正文 kafka 原本是做日志管理系统,主要是分发这块的. 那么如何做分发呢? 分发的是什么呢? 分发的其实是日志,日志是事件状态,kafka 内部就叫做Recor ...

  3. 前端面试题整理—JavaScript篇(二)

    1.使用js实现一个可持续的动画 2.实现一个可以自由拖动的悬浮框 3.实现一个倒计时效果 4.使用js仿写一个原生下拉列表框 5.创建10个<a>标签,点击的时候弹出对应的序号 6.实现 ...

  4. 前端微信小程序实战篇

    电商底部导航栏的制作 我想大家对电商一定不陌生,一般电商的底部导航栏有以下几个首页.分类.购物车.个人中心. app.json是用来配置page路径以及导航栏属性的,那我们要做首页.分类.购物车.个人 ...

  5. 小猪猪逆袭成博士之C++基础篇(二) 常量、处理类型、自定义头文件

    小猪猪逆袭成博士之C++基础篇(二) const .auto. decltype 上一章我们介绍了一些常用的类型和常见的问题,下面再介绍一些学习的时候不是特别常用但是在实际工程中很有用的一些东西. 一 ...

  6. 工作经常使用的SQL整理,实战篇(二)

    原文:工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实 ...

  7. [SQL SERVER系列]工作经常使用的SQL整理,实战篇(二)[原创]

    工作经常使用的SQL整理,实战篇,地址一览: 工作经常使用的SQL整理,实战篇(一) 工作经常使用的SQL整理,实战篇(二) 工作经常使用的SQL整理,实战篇(三) 接着上一篇“工作经常使用的SQL整 ...

  8. 微信小程序笔记整理--入门篇。

    7-2 微信小程序入门篇 准备篇 1.登录网址,https://mp.weixin.qq.com 注册一个微信小程序. 2.获取微信小程序appid,登录自己的小程序后台,在开发者设置中获得appid ...

  9. java 开发面试题小整理(一)

    本篇文档将持续更新,有基础滴,也有深层次的,谢谢! 1.看下面的程序是否有问题,如果有问题,请指出并说明理由. * byte b1 = 3; * byte b2 = 4; * byte b3 = b1 ...

随机推荐

  1. ASP.NET Core 6框架揭秘实例演示[02]:基于路由、MVC和gRPC的应用开发

    ASP.NET Core可以视为一种底层框架,它为我们构建出了基于管道的请求处理模型,这个管道由一个服务器和多个中间件构成,而与路由相关的EndpointRoutingMiddleware和Endpo ...

  2. Git简单介绍以及使用入门

    Git Git:分布式版本控制系统, 此外还有 SVN (集中式版本控制系统) 下载地址(阿里云镜像) :CNPM Binaries Mirror (npmmirror.com) Git Bash : ...

  3. Linux CPU信息说明

    命令 [root@*** ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian ...

  4. k8s被删除的pod一直Terminating状态

    微服务项目,部分服务无法delete,一直处于Terminating状态 kubectl get po -n gift 强制删除product:kubectl delete -n gift po/pr ...

  5. python https 无法访问 SSLError("Can\'t connect to HTTPS URL because the SSL module is not available

    1,需要检查python 安装的时候是否支持 https 进入python 环境,import ssl 如果正常导入就可以使用https,不能导入就需要进入下一步. 2,查看系统是否安装了openss ...

  6. 分析CC攻击以及防御

    实验目的 了解DDoS攻击原理,及一个DDoS攻击的过程 实验内容 了解DDoS攻击原理,及一个DDoS攻击的过程 实验环境描述 1. 学生机与实验室网络直连: 2. VPC1与实验室网络直连: 3. ...

  7. [旧][Android] Retrofit 源码分析之 Retrofit 对象

    备注 原发表于2016.04.27,资料已过时,仅作备份,谨慎参考 前言 在上一周学习了一下 Retrofit 的执行流程.接下来的文章要更为深入地学习 Retrofit 的各个类,这次我们先学习一下 ...

  8. windev中使用DateFile和Query作为表格数据源的一个重要区别

    表格可以使用DateFile(数据表)和Query(查询表)作为数据源,在列表页面中,因为表格一般都设置为不可编辑,所以这两者在表现使用上,区别都不大.尽管如此,我们还是需要清晰的知道,这两者本质上的 ...

  9. 解除Ubuntu禁止root远程登录

    编辑SSH服务配置文件 编辑SSH服务的配置文件sshd_config,修改SSH的端口和root用户权限. 使用到的命令:(按字母 i 进入编辑模式,按ESC退出编辑模式, :wq 保存退出). r ...

  10. 换行符号(\r\n)的历史

    文章来源:https://cloud.tencent.com/developer/article/1730918 \r\n与\n是有区别的. 如果要通用的则是\r\n,因为有些编辑器它不认\n &qu ...