Flink在诸葛智享库存预警系统的实践

Flink在诸葛智享库存预警系统的实践

樊思国

2021-08-30 16:43:501901供应链大数据flink

一键转载

作者:樊思国、王天阳、饶星、张志军

一、前言

随着数字化浪潮的到来,越来越多的电商企业利用数字化技术进行供应链管理。在促销、秒杀等场景下,库存往往会出现较为大的波动,如不及时处理,往往会带来无货可售的风险,从而带来一定的经济损失。因此,基于配置规则实现的实时库存告警平台能够让商家实时掌控库存动态,并作出应对策略。

Apache Flink作为一种流式计算引擎,近年来在业界具有广泛的应用场景。京东诸葛智享系统利用Flink实现了基于用户自定义规则的实时告警系统,下面从业务和技术两方面进行介绍。

二、业务介绍

诸葛·智享智慧供应链产品是一款为京东第三方入仓商家提供库存优化管理决策支持的精细化、智能化、自动化库存决策产品。它由京东自主研发,结合京东过去12年的零售经验积累,为商家解决运营过程中诸多核心痛点,如仓储周转天数高导致仓租成本过高亏损,畅销品缺货错过销售机会,滞销品堆积占用公司现金,海量商品补货精力无法顾及,高度依赖人员经验使用传统工具,缺少系统支持等,从而帮助商家提升工作效率。是目前市场上功能模块比较全面的一款库存决策支持及库存管理工具。

​ 诸葛·智享中的库存预警平台主要为商家解决无货、低库存预警的功能,由于商家的SKU的数量非常多,商家不能实时关注到全部库存的情况,导致商品卖无货后,造成很多跑单的情况,给商家带来了大量的损失,每年由于无货导致C取消订单量高达数百万元,由于无货导致发货不及时的C投诉大量存在。库存预警平台旨在帮助商家全面管理库存,及时了解库存状态,降低人力成本,提升库存管理效率;同时避免无货导致销售机会的丧失、发货不及时,提升客户购物体验及商家的销售机会。

uploading.4e448015.gif正在上传…重新上传取消

三、技术选型

流处理系统的技术架构发展历程大致可以分为批处理架构、Lambda架构和Kappa架构三个阶段:

批处理架构。严格来讲,批处理可以认为是一种具有边界的流数据,这个边界可以是分钟、小时、天等时间维度,也可以是按照文件路径等逻辑存储维度等进行划分。将数据按照特定(一般是时间)维度积攒到一定程度进行触发计算,一次性输入所需数据,中间经过一个或多个步骤的迭代计算,将最终结果输出到外部存储引擎。典型的批处理实现如MapReduce、Spark等。批处理特点决定了往往有比较高的计算延时,不能满足实时输出结果的业务需要,另外,同外部系统的交互性较差。uploading.4e448015.gif正在上传…重新上传取消

Lambda架构。为满足低延时场景的需要,在批处理的基础上衍生出了一种过渡期的Lambda架构,该架构的特点根据计算时延长短,分为实时计算和离线计算两部分。实时部分负责对实时到来的数据进行计算,离线部分负责历史数据的计算。一般情况下利用Storm实现实时部分计算、Hadoop实现离线部分计算。Lambda架构的缺点是需要维护实时和离线两套代码且需要保持计算结果相同,给系统运维带来很大挑战。另外Lambda架构中的实时部分往往只能得到近似的计算结果,不能满足Exactly-once语义要求。

uploading.4e448015.gif正在上传…重新上传取消

Kappa架构。随着流式计算技术的进步,出现了一种批流一体的架构模式,即Kappa架构。该架构特点是延时低,根据事件到达进行实时计算。同时一套架构支持批处理,只需要一套代码即可完成批流的计算需求,维护简单。支持Exactly-once语义。

uploading.4e448015.gif正在上传…重新上传取消

综上,我们可以从时延、维护成本、交互性及Exactly-once语义支持上对三种架构模式进行比较,如下表:

uploading.4e448015.gif正在上传…重新上传取消

当流处理架构经过以上三个阶段的发展后,流处理又存在两种模式的实现方式:微批模式和纯流式。前者使用批来对流进行模拟,认为流是一种更细粒度的批,在运行时通过制定批处理的时间,每次运行的job会处理一个批次中的数据,典型的实现如Spark Streaming。而纯流式系统是基于事件驱动的,事件可以理解为消息,事件驱动的应用是一种有状态的应用,它会从一个或多个流中摄入事件,通过触发计算更新内部状态,或外部动作对注入的事件作出反应。典型的实现如Flink。

考虑到诸葛智享的库存告警模块需要根据用户的规则配置,结合库存变动消息(事件)以及无货PV消息(事件),以及仓网关系等状态进行实时告警的需要,我们选择Flink作为流计算引擎。

四、Flink的应用

4.1、Flink基本概念

4.1.1、Flink运行时架构

4.1.1.1、Flink运行时的组件

Flink运行时架构主要包括四个不同的组件,它们会在运行流处理应用程序时协同工作:

  • 作业管理器(JobManager)

控制一个应用程序执行的主进程,也就是说,每个应用程序都会被一个不同的JobManager所控制执行。

JobManager会先接收到要执行的应用程序,这个应用程序会包括:

  • 作业图(JobGraph)
  • 逻辑数据流图(logical dataflow graph)
  • 打包了所有的类、库和其它资源的JAR包。

JobManager会把JobGraph转换成一个物理层面的数据流图,这个图被叫做“执行图”(ExecutionGraph),包含了所有可以并发执行的任务。

JobManager会向资源管理器(ResourceManager)请求执行任务必要的资源,也就是任务管理器(TaskManager)上的插槽(slot)。一旦它获取到了足够的资源,就会将执行图分发到真正运行它们的TaskManager上

在运行过程中,JobManager会负责所有需要中央协调的操作,比如说检查点(checkpoints)的协调。

  • 资源管理器(ResourceManager)

主要负责管理任务管理器(TaskManager)的插槽(slot),TaskManger插槽是Flink中定义的处理资源单元。

Flink为不同的环境和资源管理工具提供了不同资源管理器,比如YARN、Mesos、K8s,以及standalone部署。

当JobManager申请插槽资源时,ResourceManager会将有空闲插槽的TaskManager分配给JobManager。如果ResourceManager没有足够的插槽来满足JobManager的请求,它还可以向资源提供平台发起会话,以提供

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值