暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

最近的一个小需求总结

在下uptown 2020-11-08
248

这两周真真切切的感受到什么叫北漂~搬家真是消磨人意志,广大读者好好珍惜读书的日子,打工说起来嘻嘻哈哈的,打起来真是心酸呐。这周不更mysql,最近正好做了kafka个小需求记录一下自己的设计思路~

这个需求缘从何起呢,只是因为帅哥(带我的师傅)在人群中转头看了我一眼。。。大家都知道我们公司主要做数据分析平台的(如果之前不知道,那你现在知道了,贴个个人版连接,有想做简单数据分析的可以用一哈,复杂的就要充钱了),产品比较核心的功能就是将数据从数据源接入到系统中进行数据处理。

之前的数据接进来后如果数据源数据发生变动了,需要设置定时更新拉取数据,这次的需求就是希望产品可以支持流式数据,顾名思义就是数据是流动的接入到系统中,产生实时数据变更,用数据做出的图表也会实时变化,就像股票走势一样一直更新。类似这种


Kafka

先简单介绍一下kafka是什么。kafka是当下最流行的一个分布式消息中间件,通常用来传输各个系统间的数据。上游业务系统发送消息,先存储在消息中间件,由消息中间件将消息分发到对应的业务模块应用(分布式生产者 - 消费者模式)。

减少了服务之间的耦合程度。这次主要重心在消费kafka端,如何将kafka中的数据实时消费。具体的组件之类的这次就不多赘述了,有兴趣可以自行了解~等功能上线之后我再整体过一下kafka再详细写一篇。

设计思路

整体的架构为Kafka的生产者producer不断生产数据,消费者consumer去不断消费数据,将数据存储到redis做层缓冲,通过webscoket推到前端告诉前端有数据更新,前端再去请求数据。

那么kafka生产端由其他组负责,我们只需要考虑消费到实时数据即可,首先要考虑的就是如何保证持续消费,也就是通过另启线程来不断的监听,多个图表就需要多个线程,于是就采用了线程池。说实话这次有点虚,对线程池也不咋熟悉。自测的时候出的问题常常让我以为是不是今早上左脚进公司引发的。借着这次机会去好好熟悉一下


开放一个对外接口,有请求时通过线程池去分配线程监听,记录业务使用次数属性,当使用次数为0,也就是连接没有图表使用了,将consumer关闭,线程杀掉。持续消费采用线程池方案,那么数据是有新旧的而且是有序的,如何保证消费到最新的数据呢而且顺序不乱呢,这就要在redis方面的考虑了。

面试的时候面试官常常会问,redis都可以存哪几种数据类型,相信每个后端求职者都被问过,答案肯定众所周知。

  • String
  • Hash
  • List
  • set
  • zset

那么这个set跟zset有什么区别呢,最大的区别就在于zset是排序的set,也就是说zset内部维护了一个sorted用来作为排序标记。用于本次的需求正正好好,我们可以把每次数据的生产时间当作一个时间戳放到sorted里,这样数据就会有序了~

虽然不是很复杂的设计,但是搭完demo后还是很有成就感的。现在想想当年磊神搭一些中间件也不过如此(小声bb),哈哈哈哈哈,现在还没有走完开发流程,等开发完成后再好好总结一下~

最近不会再鸽了,下周见~



文章转载自在下uptown,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论