在南京时,公司的boss系统(电信的短信系统)要与第三系统对接,第三方用的是php,并非java技术栈。分布式系统当时还没这么吃香。那时能想到的最好解决方案就是共用同一数据库。
当系我方统接收到一条短信时,向短信表中插入一条数据。而第三方系统利用另一张表,记录最后他们处理短信的id,因为id是递增的,因此第三方系统就可以获获取增量数据了。

闲聊kafka

这种通过共享数据实现的系统现在看起来虽然有那么点……。但我自认为在当时是最好的架构了。
其实kafka和我上面的模型何其相似,同样用到了递增特性,同样设制一个offset指针。只是实现的方式不同,kafka的offset用zookeeper保存,并且kafka允行多个消费者拥有不同的offset,就相当于在指针处理表里多加了几条记录。
如果明白了以上机制,我们可以推断出,我们可以对kafka做些什么,比如可以手动控制offset的指向。或让多个消费都共用同一个offset。也可以绕过offset,直接读取kafka里的数据。
除了offset之外,kafka会把数据分派到region中去,region相当于上面的短信表,如果有多个短信表,多个短信处理表,每个短信会保存到其中一张表中去,那我们就没法保证信息的顺序性了。但我们能保证每张表中的数据是递增的。若能把同一个人发送的信息路由到同一张表中,我们在业务上也能保持某种顺序性了。
(未完待续)

相关文章: