我是3y,一年CRUD经验用十年的markdown程序员‍常年被誉为职业八股文选手

最近如果拉过austin项目代码的同学,可能就会发现多了一个austin-stream模块。其实并不会意外,因为这一切都在计划当中进行。

这个模块主要是接入流式处理平台(flink),用于实时计算清洗数据给到业务以及系统维护者更方便去使用消息推送平台austin

这篇文章主要来聊聊接入的背景以及我浅薄的经验吧

01、为什么流式处理平台

我在老东家有过处理数据相关的经验,也看到过站内广告「效果数据」的发展历程。

所谓效果数据,说白了则是商家在平台上投放了广告,我们需要给商家看到广告带来的效果,最核心的是「曝光」「点击」「订单」,基于这几项数据再聚合些类roi的指标。

下面来聊聊这个「发展历程」,看完这个过程或许可以更好地了解为什么需要流式处理平台

1、PHP阶段:在最初时业务以及系统结构都比较简单,把「点击」和「订单」都存入数据库表,一把梭通过定时任务全量聚合,得到最终的效果数据,而「曝光」数据则是次日再写入效果数据表中。

在这个阶段里,由于数据量不大,通过定时任务全量来聚合数据也不是不可以,那时候商家都能接受该业务的延迟性

2、Java阶段:随着业务的发展,逐渐摒弃PHP化并且广告三层结构成型、数据量日益提升、站内中间件服务平台也发展起来。通过中间件团队提供的消费binlog框架,从架构上改变聚合模式,并这个阶段可以更快地给商家展示效果数据,大概1min出效果数据

3、流式处理平台阶段:流式处理平台是对「计算」或者说处理数据时的抽象,在这抽象基础上它更能充分利用系统的资源(一个大的任务被拆分多个小任务,然后分发到不同的机器上执行)

4、广告效果数据是先用的Storm作为流式处理平台,数据跑了几年都挺稳定的,性能吞吐量上也是满足业务使用的。后来Flink兴起,支持SQL、Exactly-Once、流批一体化等,随着公司内推广,我将广告效果数据从Strom改至Flink体系上,大概秒级出效果数据。(其实还可以压缩,但需要兼顾DB的性能成本,只要业务上能接受即可。Traff-off!)

在第三点我提出了「数据处理时的抽象」,我是这样理解的。在Storm里,定义spout为输入,bolt为中间处理或输出,而中间的数据流转为tuple,用shuffle机制来控制数据的流向

Flink里,就有更加明确的语义来说明输入和输出了(程序的API也更有语义性)

这些流处理平台都会数据处理进行了抽象,让我们更加方便且高效去处理数据,比如一般会以下的功能:

02、austin哪里用到了流式处理平台

在前面austin系统已经设计了一部分的埋点信息了,在日志上都已经打印了下来。

但针对这一部分数据,迟迟没有做处理(不过之前有一起跟着学austin的小伙伴给我截了日志,我一眼就知道是哪里出了问题)

而接入流式处理平台就能对这一部分数据进行清洗(根据下发者维度、根据模板消息维度等等),得到清洗后的数据再给到接口去展示或者排查问题使用,能大大提高排查或者业务方的使用效率

03、Flink入门

Flink从2018年开始流行,现在已经有很多的公司都在用Flink作为实时大数据处理的流式平台。至于我为什么会选择Flink的话,原因有以下:

1、我懂点儿Flink(主要是懒得学其他的了,目前还够用)

2、Flink发展了几年,成熟且被很多大公司用,社区活跃

3、Flink的官方文档挺不错的,适合学习和排查问题

首先我们安装下Flinkdocker-compose.yml文件内容:

version: "2.2"
services:
jobmanager:
image: flink:latest
ports:
- "8081:8081"
command: jobmanager
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
- SET_CONTAINER_TIMEZONE=true
- CONTAINER_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai
taskmanager:
image: flink:latest
depends_on:
- jobmanager
command: taskmanager
scale: 1
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
taskmanager.numberOfTaskSlots: 2
- SET_CONTAINER_TIMEZONE=true
- CONTAINER_TIMEZONE=Asia/Shanghai
- TZ=Asia/Shanghai

完了之后直接docker-compose up -d就可以启动flink了,我们访问在浏览器输入ip:8081端口就能看到flink的后台了

简单看了下后台,就能知道我们在本地开发完打包成jar就可以在Submit New Job提交jar包给Flink去跑了

而在写代码的时候,可以参考官方文档给出的mvn命令去构建Flink的基础环境

当然啦,现在我已经搭好了,你们可以直接拉代码下来看austin-stream模块就完事了。如果你们是自己从零搭的话可能还要注意的是,pom里的plugin需要改动(不然打包会失败的),可参考我的pom文件

04、austin代码

从目前的代码结构和逻辑上看,还是非常简单的,没有学过Flink的同学应该都能看懂:

目前主要实现了将数据实时聚合到Redis,分了两个维度:用户和消息模板(对应的Redis结构都已经写在了代码的注释上了)

跟着做austin项目的小伙伴,只要在kafka创建对应的topic(我这里定义的topicName是austinLog),并且在AustinFlinkConstant中填写Kafka的Broker信息以及Redis信息后,编译打包就完了。

提交到Flink平台之后就可以跑了:

05、后续

经过Flink的处理已经把数据写入到Redis里边了,最近我已经在写Controller层开发接口在页面上将清洗后的数据在页面上做展示了。

从前面的页面实现上如果有了解过的同学可能就知道我用的是低代码平台amis,而amis我看了下图表的文档用的是echarts进行渲染的。

应该问题不大,过两天估计就开发完了,主要就是适配参数的问题了,到时候看起来应该就算比较完整了。

最近已经有小伙伴提了pull request写了微信服务号的接入了,我已经merge了代码,但还没调试。主要比较麻烦的是,我没有营业执照,就不好开服务号进行调试,我后面再想想办法。

今天就聊到这吧,对Flink感兴趣的同学可以看看我以往的几篇文章和官网入门下,我建议先可以把austin的代码先拉下来,部署一把自己体验体验,然后再看理论的知识。

1Flink入门

2Flink背压机制

3Flink CheckPoint机制

都看到这里了,点个赞一点都不过分吧?我是3y,下期见。

关注我的微信公众号【Java3y】除了技术我还会聊点日常,有些话只能悄悄说~ 【对线面试官+从零编写Java项目】 持续高强度更新中!求star!!原创不易!!求三连!!

austin项目源码Gitee链接:gitee.com/austin

austin项目源码GitHub链接:github.com/austin

Java如何使用实时流式计算处理?的更多相关文章

  1. Storm简介——实时流式计算介绍

    概念 实时流式计算: 大数据环境下,流式数据将作为一种新型的数据类型,这种数据具有连续性.无限性和瞬时性.是实时数据处理所面向的数据类型,对这种流式数据的实时计算就是实时流式计算. 特征 实时流式计算 ...

  2. 实时流式计算框架Storm 0.9.0发布通知(中文版)

    Storm0.9.0发布通知中文翻译版(2013/12/10 by 富士通邵贤军 有错误一定告诉我 shaoxianjun@hotmail.com^_^) 我们很高兴宣布Storm 0.9.0已经成功 ...

  3. 实时流式计算框架——JStorm

    1.本地调试 a.步骤:生成Topology——实现Spout接口——实现Bolt接口——编译运行 b.加入依赖 <!-- JStorm --> <dependency> &l ...

  4. Java的lamda表达式/函数式接口/流式计算

    在我们看他人code的时候经常会看到,可能会经常看到lambda表达式,函数式接口,以及流式计算.在刚接触这些新功能时,也觉得真的有必要吗?但是现在写多了,发现这个功能确实能简化代码结构,提升编码效率 ...

  5. Others-阿里专家强琦:流式计算的系统设计和实现

    阿里专家强琦:流式计算的系统设计和实现 更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud 阿里云数据事业部强琦为大家带来题为“流式计算的系统设计与实现”的演讲,本 ...

  6. 大数据学习:storm流式计算

    Storm是一个分布式的.高容错的实时计算系统.Storm适用的场景: 1.Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中. 2.由于Storm的处理组件都是分布式的, ...

  7. 分布式流式计算平台——S4

    本文是作者在充分阅读和理解Yahoo!最新发布的技术论文<S4:Distributed Stream Computing Platform>的基础上,所做出的知识分享. S4是Yahoo! ...

  8. 流式计算新贵Kafka Stream设计详解--转

    原文地址:https://mp.weixin.qq.com/s?__biz=MzA5NzkxMzg1Nw==&mid=2653162822&idx=1&sn=8c4611436 ...

  9. 流式计算(二)-Kafka Stream

    前面说了Java8的流,这里还说流处理,既然是流,比如水流车流,肯定得有流的源头,源可以有多种,可以自建,也可以从应用端获取,今天就拿非常经典的Kafka做源头来说事,比如要来一套应用日志实时分析框架 ...

随机推荐

  1. WPF之复选MVVM TreeView(TreeView+CheckBox)

    需求背景: 当我们用到权限菜单栏时权限菜单栏属于递归效果,我们需要用到TreeView+CheckBox进行组合复选开发时,我们需要解决此类问题时怎么办,那么就引出今天的小笔记内容 实现方式: 下载M ...

  2. 通过shell脚本进行linux服务器的CPU和内存压测

    文章目录 内存压测 python的方式 shell的方式 cpu压测 在正常手段下,这个只是压测的方法 在不正常手段下(crontab计划任务),可以提高CPU和内存的使用率 什么?你问我为什么要提高 ...

  3. suse 12 二进制部署 Kubernetets 1.19.7 - 第05章 - 部署kube-nginx

    文章目录 1.5.部署kube-nginx 1.5.0.下载nginx二进制文件 1.5.1.编译部署nginx 1.5.2.配置nginx.conf 1.5.3.配置nginx为systemctl管 ...

  4. Graph Based SLAM 基本原理

    作者 | Alex 01 引言 SLAM 基本框架大致分为两大类:基于概率的方法如 EKF, UKF, particle filters 和基于图的方法 .基于图的方法本质上是种优化方法,一个以最小化 ...

  5. RENIX 软件如何进行IP地址管理——网络测试仪实操

    本文主要介绍了BIGTAO网络测试仪如何通过RENIX软件进行IP地址管理.文章分为五部分内容,第一部分介绍了如何通过机框显示屏查看IP地址,之后几部分分别介绍了机框按钮修改.机框接显示器/键盘修改. ...

  6. 微信小程序使用weui扩展组件踩坑

    最近在做微信小程序,引入weui的时候踩坑了好久,这里记录一下遇到的问题. 微信官方文档给了两种weui引入方式: 通过 useExtendedLib 扩展库 的方式引入,这种方式引入的组件将不会计入 ...

  7. kibana命令复制索引

    POST _reindex { "source": { "index": "原索引名称" }, "dest": { &q ...

  8. SpringBoot进阶教程(七十三)整合elasticsearch

    Elasticsearch 是一个分布式.高扩展.高实时的搜索与数据分析引擎.它能很方便的使大量数据具有搜索.分析和探索的能力.充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更 ...

  9. Leaflet:控件Control相关

    Leaflet官方文档中只给出了4种控件:Zoom.Attribution.Layers.Scale:它们都是继承自Control类,具体可以参考Control. Control Zoom.Scale ...

  10. 【一周聚焦】 联邦学习 arxiv 2.16-3.10

    这是一个新开的每周六定期更新栏目,将本周arxiv上新出的联邦学习等感兴趣方向的文章进行总结.与之前精读文章不同,本栏目只会简要总结其研究内容.解决方法与效果.这篇作为栏目首发,可能不止本周内容(毕竟 ...