民航系统是一个复杂的分布式系统,包括航班调度、机场安检、客户服务、数据收集和处理等多个环节。在这些环节中,消息通信是非常重要的一环,直接关系到整个系统的可靠性和性能。传统的RPC通信方式存在一些问题,例如耦合度高、易受单点故障影响、无法处理异步通信等,因此消息队列逐渐成为了分布式系统中异步通信的主要方式。目前,我国民航业处于非常重要的发展阶段,在各类生产系统中,每天都会产生大量的数据,而这些数据背后蕴含着非常大的价值。对于大部分数据价值而言,一般与产生时间具体时长之间呈现出反比例关系,也正是在这种环境下,怎样有效提升实时计算效率,与实时计算框架质量之间有着密切联系,但是,会影响到计算效率的主要问题,是怎样将数据传输到计算机系统当中去。在固定的业务场景中,选择有效的分布式消息队列,对于提升实时计算效果有着重要作用。
1、消息队列概念
对于消息队列而言,常用名词主要体现在了以下几个方面:第一,消息。是在消息队列中进行储存的基本内容,生产者将需要进行储存的消息,由push传输到broker中,然后由Consumer在需要的时候,主动在broker中搜索出消息;第二,话题。是在消息队列当中进行储存的同类型消息,一般主要列入到同一话题当中;第三,生产者。可以根据明确的话题,将消息传输到broker当中;第四,消费者。对已经明确的话题订阅之后,主动从broker当中提取相关数据,这时就可以获取到消费数据。
Kafka属于一种分布式和订阅的消息队列系统,生产者将生产效益以及指定话题传输到消息集群中,这时对于消费者而言,会主动的到消息集群中订阅指定话题,对于中间储存时间比较长的消息,被称作为broker。对于消息偏移量而言,因为Kafka属于无状态的消息队列,所以,offset主要是被储存到消费者当中的,可以针对消费者在Kafka当中的消费情况做出详细记录。
图1 卡夫卡系统架构
上图1所体现的是Kafka集群的消息发布与消费的架构模型,如果其中的某个节点出现问题时,系统仍然可以继续运行,但是发生问题节点中储存的信息可能会丢失。因为Kafka是无状态的,这就要求消费者需要维护消息队列集群中的偏移量,对于上次的消费状态做出准确记录。消息偏移量是不断上升的,但是不连续,因此,在对下一消息位置进行计算的过程中,需要在原本偏移量上增加目前消息的长度。
2、实验设计
2.1 环境设计
在对实验环境进行设计时,主要使用到了本地的虚拟机PC开展测验工作。关于机器设置情况如下表1所示。表1 测试环境主机信息表
其中测试主机的网络配置情况如下表2所示:表2 消息队列测试集群信息
2.2 实验操作流程
结合下图2中的内容来看,其中体现出了整个实验系统流程,生产者将信息传输到Broker当中,这时消费者对Broker中的数据信息进行计算。在该实验过程中所产生的数据信息,主要是通过程序自动形成的,然后在储存到Broker当中。对于实时计算系统而言,也是提前构建好的系统,在具体的工作中,主要是构建三种消息队列,同时与生产者与消费者之间有效连接,最后完成消息生产与消费效率的计算工作。图2 系统流程图
3、海量数据消息队列的性能优化对比与优化
3.1 创新性
在数据计算过程中,为了保证最终计算结果准确性,放弃了消费者通过维护offset来对Kafka集群中技术的消费,选择了一种新型的消费模式。设计了消费者读取数据的接口与消费者修改数据偏移量的接口,这样消费者在对数据接口进行调用时,可以对偏移量接口进行调整,从而保障消费端口的可靠性。
3.2 消费者可靠性设计
在传统的消费者端数据信息进行读取时,通常会面临一些问题的产生,主要体现在了以下两个方面:第一,传输信息的丢失;第二,已经消费过的信息,重新进行传送。因此,在对消费者可靠性方案进行设计的过程中,需要对以下两点内容引起重视:首先,在生产者当中,应该为每一条消息增加一个主键ID,在消费者当中,如果检验出重复性的ID,可以自动过滤掉,通过这种方式可以保障已经被消费过的信息不会再次消费。在具体的传送过程中,怎样保证数据不会发生丢失现象,消费者对数据的处理与修改数据偏移量之间应该同步开展,也就是在消费者处理完一条数据之后,再次对数据进行提交。
3.3 测试用例
在具体的测试环节中,其测试目的主要是三种消息队列的吞吐量、磁盘以及CPU资源消耗量等方面进行对比。在前期准备工作中,需要保证三个消息队列正常启动,同时数据生产程序能够稳定进行。在测试阶段中,首先将消息队列集群与计算集群进行启动,根据实际情况编写出完善的测试脚本,重复进行十次试测试流程,然后取其中的平均值,降低误差,最终完成结果的绘制工作。
3.4 实验结果
结合下表3中的内容来看,在实时流处理场景中,吞吐量达到了17.26w/s,从吞吐量这一方面来看,体现出了非常好的性能,CPU的资源消耗量比较高。
表3 实验结果
4、结语:
综上所述,如今,基于民航新时代发展背景下,互联网技术水平有了很大提升,在人们乘坐飞机出行中实现了非常广泛的应用,并且更多的行业在开展数据处理工作时,对信息处理实时性以及吞吐量等方面提出了更高的要求。在实时流处理的业务场景中,选择合适的消息队列,对于数据储存与读取等方面发挥着非常重要的作用。本文首先对Kafka的消息结构进行了优化与完善,然后通过对比,在Storm集群实时计算环境当中,对当前性能排名前列的三种消息队列性能进行了对比分析,最终总结出,在实时计算海量数据与低延迟的基础上,对吞吐量、磁盘以及CPU消耗标准等多项因素进行综合衡量,其中发现,Kafka发挥出了更大的优势。本文在具体的分析过程中,会存在一定的局限性,因为计算机技术是不断更新的,所以,在现有的生产环境下,还是需要通过实验结果来证实,并不是本文的实验结论就是固定的。需要在今后的不断创新与改革中,为生产与发展提供更加高效的互联网服务工作。
参考文献:
[1]王岩,王纯.一种基于Kafka的可靠的Consumer的设计方案[J].软件.2018,(1).
[2]马浩然.基于NS3的分布式消息系统 Kafka的仿真实现[J].软件.2019,(1).
[3]周京晖.集成消息服务和定时通知的分布式内存数据库[J].软件.2019,(1).
[4]张鹏,李鹏霄,任彦,等.面向大数据的分布式流处理技术综述[J].计算机研究与发展.2014,(02).1-9.
[5]陈俊伟.分布式数据库两阶段提交协议的研究与改进[J].重庆大学.2020.
[6]谭玉靖.基于ZooKeeper的分布式处理框架的研究与实现[D].2019.