栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > 架构设计

Flink在海量消息推送实时统计场景的应用

架构设计 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flink在海量消息推送实时统计场景的应用

前言:

消息推送常常在APP运营过程中,作为提高活跃,增加用户粘性的利器被广泛使用。产运的同学更希望可以看到每场推送活动后的实际统计数据。例如推送的时效性,渠道的推送成功率,到达率和用户的点击率。对于海量推送数据的统计与查询也面临着不小的挑战,本文主要对Flink实时计算技术在海量推送消息实时统计场景进行介绍

一、消息推送是什么

消息推送是一种产运同学通过推送工具主动给APP用户发送消息,消息可直接显示在手机通知栏,能起到提醒用户、增强用户黏性的作用,由于其投放精准、成本低廉是产品及运营团队常用的手段。

二、现有消息推送架构 2.1 消息推送的作用

产品侧:功能提醒,引导用户关注,提高产品功能使用率与用户体验。
运营侧:活动运营,促销活动告知,提高用户参与度与粘性;召回用户 / 提高活跃度与留存等等

2.2. 消息推送服务系统架构梳理

2.2. 存在的问题:
  • 日志量大,同步延迟
    • 推送服务日志数据平均每小时1G左右,峰值5G左右,数据同步延迟4小时左右。
  • 存在大量无效日志和重复落地的数据
    • 由于数据量级过大,业务排查问题时跑一个简单的SQL聚合语句往往需要占用大量集群资源。
  • 问题排查效率低
    • 各渠道服务日志散落在不同日志目录
    • 不同厂商的推送策略不同,判断推送是否push到达,需要结合不同app项目的客户端到达埋点日志和推送回执日志。
  • 缺乏测试结果的实时反馈
    • 缺乏对业务测试数据的实时结果反馈,单条数据的推送到达点击测试,需要测试,分析师,大数据,基础服务同学,研发共同配合才能拿到测试结果。
    • 问题排查,测试校验,需要反复沟通,影响效率。
  • 推送信息查询效率低
    • 需要消耗大量kafka缓存数据才能拿到结果数据
    • hive只能提供t-1的离线结果数据。
  • SLA统计支撑业务单一
    • 只支持主板业务,缺乏对创新业务支撑。
  • 重复造轮子
    • 不同app、不同场景推送数据统计需求缺乏统一看板,每个push效果统计结果都需要加工SQL逻辑。
三、实时消息推送统计方案设计 3.1、实时统计可以解决什么问题 3.2、为什么选Flink作为计算引擎

在进行实时统计计算引擎的选型时,对比了目前流行的实时统计开源项目,storm、spark streaming、flink。下面图表是对三个计算引擎的特点作了对比总结

产品模型吞吐量事务机制状态管理容错性延迟支持hive-catalogAPI
stormnative(数据进入立即处理)低默认At-least-once可实现 Exectly-once无ACKs、zk毫秒否基础API
sparkmirco-batch(微批处理)高默认At-least-once可实现 Exectly-once有CheckPoint、WAL秒级否声明式
flinknative&batch高At-least-once与Exectly-once 自由切换有distribted snapshot分布式快照毫秒支持声明式
  1. 从处理效率上来说,基于管道式数据推送的Flink在高吞吐低延迟方面更胜一筹。
  2. 同时 Flink1.10版本完美的支持了hive catalog,可以利用hive的元数据管理,将实时的流数据与hive数据仓库中的历史数据进行join操组起来。
    3.相对于storm和spark来说,flink可以用一套SQL逻辑同时进行离线和实时任务的开发,节省来大量的开发时间。
  3. flink的exact once语义保证了数据不会被重复消费和遗漏。
3.3、Flink有哪些重要特性 事件驱动型(Event-driven)

事件驱动型应用是一类具有状态的应用,它从一个或多个事件流提取数据,并根据到来的事件触发计算、状态更新或其他外部动作。比较典型的就是以kafka为代表的消息队列几乎都是事件驱动型应用。

流与批一体的世界观

无界数据流:无界数据流有一个开始但是没有结束,它们不会在生成时终止并提供数据,必须连续处理无界流,也就是说必须在获取后立即处理event。对于无界数据流我们无法等待所有数据都到达,因为输入是无界的,并且在任何时间点都不会完成。处理无界数据通常要求以特定顺序(例如事件发生的顺序)获取event,以便能够推断结果完整性。

有界数据流:有界数据流有明确定义的开始和结束,可以在执行任何计算之前通过获取所有数据来处理有界流,处理有界流不需要有序获取,因为可以始终对有界数据集进行排序,有界流的处理也称为批处理。

分层api

你可以在表与 DataStream/DataSet 之间无缝切换,以允许程序将 Table API 与 DataStream 以及 DataSet 混合使用。

Flink提供的最高层级的抽象是 SQL 。这一层抽象在语法与表达能力上与 Table API 类似,但是是以SQL查询表达式的形式表现程序。SQL抽象与Table API交互密切,同时SQL查询可以直接在Table API定义的表上执行。

支持有状态计算

Flink在1.4版本中实现了状态管理,所谓状态管理就是在流失计算过程中将算子的中间结果保存在内存或者文件系统中,等下一个事件进入算子后可以让当前事件的值与历史值进行汇总累计。

支持exactly-once语义

Exactly once: 对于一条message,receiver确保只收到一次

支持事件时间EventTime
目前大多数框架时间窗口计算,都是采用当前系统时间,以时间为单位进行的聚合计算只能反应数据到达计算引擎的时间,而并不是实际业务时间
3.4、Flink在实时消息推送统计中的应用

1.代码案例

四、总结
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911526.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号