简单整理一些自己使用kafka的一些感受。
正文一切都要回到真实的世界上, 计算机世界只是真实事件的一个缩影。
计算机世界有一个重要的东西,那就是数据库。
数据库记录着真实世界发生了什么,准确的说就是这个世界发生了什么然后产生了什么结果。
比如说一辆火车,那么数据库记录这辆火车是开启的开始停止的,或者说乘坐着几个人,也就是这辆火车对当前世界的状态。
有比如说,一个人,数据库里面记录着这个人的年龄、身高、性别等。也就是记录这个人的状态。
可以说数据库,是事物的状态机。
这个是满足以前的,但是呢,现在有一个新的需求了。 就是这辆火车,在A 站每一趟上去多少人下去多少人。
这似乎就不是某件事物的状态了,而是某个事件的状态了,也就是到底发生了什么事,时间、地点、任务等,而且是一个递增的关系。
如果将事件状态存储到数据库中,也是可以的(这里不要去考虑技术、性能这块)。 但是适合不适合呢?
无论是无关系数据库还是关系数据库,他们的表或者说集合吧,都是有固定结构的,无关系数据库不是说没有数据结构哈,而是说集合直接没有明确的关系。
但是描述一件事情好像是没有固定的结构的,当然了也可以有,但是这样无法准确的表述这件事了。
那么人们就定义了一种结构体,叫做log,就是日志,来描述这件事情发生了什么。那么日志如何管理呢?
kafka 制作出来作为一个日志管理器了。
如果不了解日志的重要性的话,初学者认为自己debug 调试的时候的日志,有啥管理的,有错误看下日志即可,还需要管理,难道是要统一管理?
这里的日志,不仅仅是我们项目中的debug日志或者线上的异常日志,还可以是表述业务中一件事情的状态,这个也是日志。
可以想象,原来我们数据库存储的是事务的状态,那么日志的是事件的状态,可想而知日志管理是多么重要。
那么日志如何管理呢? 想到的就是给日志加上分类,这个分类就是topic,也就是主题了。
现在日志有管理了,可以对其进行不同的分类了,比如定义了火车主题,里面有火车上停战的时候下了多少人、几点停战的的,还有火车的能源消耗,每分钟记录一次这样的事件、里面记录了能源的各种值、记录时间等。
有比如说一个账户主题,那么里面记录着用户权限的变化、 用户信息的变化等。
现在这个数据相当庞大了,当然了也有很多的需求需要解决,比如说有个需求就是分析火车的情况、另一个问题就是分析用户的某些情况,似乎一堆问题了。
那么如何解决分析这个大问题呢? 那就是把问题拆分。 需要分析用户的订阅用户主题,需要分析用户的,订阅用户主题,那么kafka 日志管理,就会将相应的日志推给各自的订阅者。
当然各自的订阅者分析问题,同样会产生事件状态,又可以产生另外一个主题,放在任何一个kafka日志管理器中,然后一些图表分析服务又可以订阅新的主题,产生了相应的表格,进行分析。
kafka的本质不是存储这些日志,而是用于管理的,把日志收集然后推送给相应的真正处理的系统,所以kafka 会有默认的清除时间,因为其本质就是来让你中转的,其也没有索引、查询这个概念。
正则的日志沉淀,可以使用其他工具,比如es。
现在了解了kafka 的诞生以及历史,那么下面就开始了解,kafka如何来做好这个日志管理器的吧。
结下一节介绍一下kafka的设计。