一种基于GO语言的作业状态监听转换及Kafka推送方法和系统与流程
本申请涉及分布式数据处理,尤其涉及一种基于go语言的作业状态监听转换及kafka推送方法和系统。
背景技术:
1、在分布式边缘计算环境中,算力调度系统持续产生大量作业状态变更事件,下游的监控、计费与调度决策系统需要实时获取这些作业状态。由于部分算力调度系统未提供标准的作业状态查询或推送应用程序接口,实践中通常由采集进程监听其输出的作业状态日志文件来获取作业状态变更信息,经格式转换后借助消息中间件,例如分布式发布订阅消息系统kafka,分发至下游系统,且该采集推送进程往往部署于分布式边缘计算节点之上。
2、作为最接近的现有技术,一种作业状态采集推送方案由采集线程周期性读取日志文件的新增内容并解析为结构化记录,写入一个由互斥锁保护的共享队列,再由发送线程从该共享队列取出记录并写入kafka的固定分区,采集线程与发送线程共用同一缓冲区且读写均以互斥锁保护,发送线程按轮询方式或固定分区键选择目标分区。
3、上述最接近的现有技术存在如下需要解决的技术问题。第一,采集线程与发送线程共用带互斥锁的缓冲区,当算力消耗突发波动、日志写入速率骤增时两侧对同一把锁的竞争加剧,数据在缓冲区积压、传递延迟升高,高算力消耗作业的状态突变不能被及时反映到下游,其原因在于互斥锁将采集与发送两条本可并行的路径串行化。第二,发送线程按轮询或固定分区键选择目标分区,未顾及各broker节点实时io吞吐能力的差异,当某一broker磁盘io延迟升高时仍按原比例分配报文,形成个别分区写入热点并拉低整体吞吐。第三,采集进程重启或日志文件句柄失效后缺乏对已成功推送位置的可靠记录与续接手段,重启后或从文件头重复读取造成状态重复采集,或跳过未读部分造成状态漏采。第四,采集推送进程在边缘计算节点上运行时未对节点处理器占用、内存余量、芯片温度及本地闪存擦写寿命等物理指标加以约束,负载升高时一味增加并发协程,容易触发芯片硬件降频,并在网络断连时对闪存执行高频写入而缩短其寿命。
技术实现思路
1、本发明的目的在于提供一种基于go语言的作业状态监听转换及kafka推送方法和系统,用以解决现有技术中作业状态日志读取、字段转换和消息推送耦合度高,导致高并发场景下容易出现读取滞后、处理阻塞、分区积压不均以及重启后重复推送或漏推送的问题。
2、为实现上述目的,本发明提供一种基于go语言的作业状态监听转换及kafka推送方法,包括如下步骤:
3、监测quickpool算力调度系统生成的作业状态日志文件,根据所述作业状态日志文件中新增加的日志内容,确定初始作业状态数据流;
4、在预设内存池中,通过原子指令交换所述初始作业状态数据流所在缓冲区的地址指针,使正在写入的缓冲区被切换并锁定为待处理缓冲区,从而得到待处理作业状态数据流,并将所述待处理作业状态数据流输入无锁通道;
5、利用go协程从所述无锁通道中提取所述待处理作业状态数据流,并对所述待处理作业状态数据流执行格式转换,生成包含节点标识及算力消耗等级的作业状态报文,将所述作业状态报文传输至带缓冲并发通道;
6、测量所述带缓冲并发通道中等待发送的作业状态报文数量,当所述数量达到预设发送阈值时,生成关联有所述作业状态报文的发送指令,并依据所述节点标识、所述算力消耗等级以及kafka集群中各broker节点的实时io吞吐能力,确定kafka集群的目标分区;
7、利用go协程池响应所述发送指令,将所述作业状态报文投递至所述目标分区,并根据kafka集群返回的投递确认信息,将所述作业状态报文对应的日志末端读取偏移量确定为断点恢复记录并进行固化存储,作为系统重启后的恢复起点。
8、本发明提供一种基于go语言的作业状态监听转换及kafka推送系统,其特征在于,包括:
9、监测模块,用于监测quickpool算力调度系统生成的作业状态日志文件,根据所述作业状态日志文件中新增加的日志内容,确定初始作业状态数据流;
10、交换模块,用于在预设内存池中,通过原子指令交换所述初始作业状态数据流所在缓冲区的地址指针,使正在写入的缓冲区被切换并锁定为待处理缓冲区,从而得到待处理作业状态数据流,并将所述待处理作业状态数据流输入无锁通道;
11、提取模块,用于利用go协程从所述无锁通道中提取所述待处理作业状态数据流,并对所述待处理作业状态数据流执行格式转换,生成包含节点标识及算力消耗等级的作业状态报文,将所述作业状态报文传输至带缓冲并发通道;
12、测量模块,用于测量所述带缓冲并发通道中等待发送的作业状态报文数量,当所述数量达到预设发送阈值时,生成关联有所述作业状态报文的发送指令,并依据所述节点标识、所述算力消耗等级以及kafka集群中各broker节点的实时io吞吐能力,确定kafka集群的目标分区;
13、投递模块,用于利用go协程池响应所述发送指令,将所述作业状态报文投递至所述目标分区,并根据kafka集群返回的投递确认信息,将所述作业状态报文对应的日志末端读取偏移量确定为断点恢复记录并进行固化存储,作为系统重启后的恢复起点。
14、本申请通过内存池双缓冲与原子指针交换配合无锁通道,将采集与发送解耦,消除带锁缓冲区在突发波动时的锁竞争,从而解决突发波动下状态传递延迟高的问题,使高算力消耗作业的状态突变得以低延迟传递;通过依据节点标识、算力消耗等级与各broker实时io吞吐能力共同确定目标分区,解决固定键或轮询造成的分区热点问题,实现分区负载均衡;通过将投递确认对应的日志末端读取偏移量固化为断点恢复记录,解决重启后读取位置无法续接的问题,使系统重启后可从确切位置续采,避免状态漏采与重复采集,整体提升高并发场景下作业状态推送的实时性与可靠性。
1.一种基于go语言的作业状态监听转换及kafka推送方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述地址指针的交换触发条件包括:根据所述算力调度系统内高算力消耗作业在短时间内的算力变化剧烈程度,动态确定优先换出水位线;
3.根据权利要求1所述的方法,其特征在于,在利用go协程池响应所述发送指令之前,还包括:
4.根据权利要求1所述的方法,其特征在于,所述依据所述节点标识、所述算力消耗等级以及kafka集群中各broker节点的实时io吞吐能力,确定kafka集群的目标分区,包括:
5.根据权利要求1所述的方法,其特征在于,所述利用go协程从所述无锁通道中提取所述待处理作业状态数据流,并对所述待处理作业状态数据流执行格式转换,生成包含节点标识及算力消耗等级的作业状态报文,包括:
6.根据权利要求1所述的方法,其特征在于,在利用go协程池响应所述发送指令,将所述作业状态报文投递至所述目标分区之后,还包括:
7.根据权利要求1所述的方法,其特征在于,所述监测quickpool算力调度系统生成的作业状态日志文件,根据所述作业状态日志文件中新增加的日志内容,确定初始作业状态数据流,包括:
8.根据权利要求1所述的方法,其特征在于,所述根据kafka集群返回的投递确认信息,将所述作业状态报文对应的日志末端读取偏移量确定为断点恢复记录并进行固化存储,包括:
9.根据权利要求1所述的方法,其特征在于,在监测quickpool算力调度系统的作业状态日志文件之前,还包括:
10.一种基于go语言的作业状态监听转换及kafka推送系统,其特征在于,包括:
版权声明:本站专利文献数据主要来源于国家知识产权局等公开渠道,由 技术新讯 进行整理汇编。页面设计及数据汇编的著作权归本站所有。全部内容仅供个人学习、科研评估与技术交流参考,严禁用于任何商业用途(包括但不限于直接生产制造、技术转让、倒卖数据等)。
免责条款:专利技术具有时效性,本站不对资料的绝对准确性、完整性和可实施性提供任何明示或暗示的担保。因参考本站内容造成的直接或间接损失,本站不承担相关法律责任。若您认为本站内容有侵权问题,请及时提供权属证明与我们联系,本站将在核实后依法处理。反馈意见:yyfuon@163.com