基于kafka消息平台的软件系统设计

2018-11-05 07:48裴宏祥于晓虹
电子技术与软件工程 2018年18期
关键词:开发应用

裴宏祥 于晓虹

摘要: kafka是一个高吞吐量、高性能的分布式消息系统,高吞吐量能够支撑海量数据处理需求,高性能能够高效实时的传播数据。本文浅析kafka的特征和应用,并提出了基于此的软件系统设计应用,希望可以为相关研究提供参考。

【关键词】kafka 消息队列 开发 应用

为迎合应用系统的高吞吐量、高实时性的要求,笔者所在项目,采用kafka作为消息平台,完成海量话单数据的传输和并发实时处理。1Kafka的特点

(1)处理速度快,高吞吐量,呈分布式,多分区。

(2)不需要停机,就可以实现主机的扩展。

(3)能够把数据长久的放到硬盘和replication中,防止丢失数据。

(4)可以支持多消费者(重要特点)。

(5)支持online(实时消费)和offline(离线消费,比如按天消费)的等消费模式。

(6) Kafka的消费都是利用pull的方式,就是依靠客户端comsumer主动拉取数据,在客户端维护offset偏移量。客户端实现了消费的随意性,更加灵活,并且对服务端的压力小。

和以前的消息中间件比起来,Kafka的创新之处最为主要的就是其代理服务器呈现无状态性,对于消息(Message),代理不会记录是不是为用户所读取,更不会清除消息。而且,在Kafka中,数据压缩的形式大大节约了空问,提高了运作的效率。

2 基于kafka消息平台的系统设计研究

基于kafka进行系统设计开发时,要充分结合系统目标及kafka的特点。本文主要针对笔者所在项目的设计过程中,遇到的关键点进行简要分析,涉及消息准确性保证、消息可追溯性、消息批量处理等。

2.1 合适的偏移量管理模式设计

根据软件系统不同业务对数据处理的要求,选择合适的偏移量管理模式,是应用自己管理offset,还是使用kafka提供的机制。对消息处理可以重复或遗漏时,可以使用kafka提供的High-level接口集,来维护offset,而对消息数据的处理需要符合不重复不遗漏的要求时,要采取可靠的偏移量管理机制,可以通过Kafka底层的low-level接口集,来获取kafka数据,并且通过应用自行保存和管理offset,保障数据消费的准确性、可靠性。笔者参与设计开发的系统,对于计费数据要求唯一、准确,因此单独设计构造了offset管理功能,确保消息的可靠消费,而对于短信下发数据,则采用了使用kafka提供的offset管理服务。

2.2 消息的时序性保障设计

在Kafka中,消息以Topic进行分组,在Topic下又可以分成多个partitiong,由此kafka集群中,存在着消息分布。属于同- Topic的Partition的消息是有序的,分布在不同Topic和Partition上的消息则是无序的。消费消息的应用对消息时序性有严格要求时,应采取写入消息时保证消息时序的设计方法。使用如下参数max.in.fiight.requests.p er.connection防止写入消息时乱序。

2.3 通过消息组装设计,支撑批量数据处理

单条消息处理时,客户端与服务端会频繁发送数据包,海量数据且在保证所有副本写入成功后回执的方式下,势必带来性能下降。笔者所在项目为了方便消息管理,同时解决客户端与服务端频繁发送数据包所带来的性能下降,将多个消息内容通过JSON的格式组装成一个消息,即,一个消息中包含多个“消息内容”。这样的消息組装设计,可以支撑批量数据处理,平衡了性能下降问题。

2.4 应用支持消息和文件两种模式

基于原有系统升级的话,要考虑应用系统支持传统的文件载体处理模式,同时这也是对异常情况的补偿机制。设计应用系统,通过参数控制,实现消息或文件的模式间转换。在开发实现上,需要在底层kafka读写和上层业务代码处理中间,设计一层消息处理的类文件操作封装。这样每类进程的不同通道,都可以通过参数控制,选择不同的处理模式。

2.5 消息的异常补偿机制设计

kafka集群异常场景比较多,针对不同场景,需设计不同的补偿机制,包括消息丢弃、日志打印、偏移量保存、应用退出等异常处理方案。

以笔者项目中超时的处理为例,提出Consumer异常情况下可参考的设计建议。Consumer消费时,为了效率,一般会设置较短的超时时间,此时consumer连接leader请求metadata信息,给定的超时响应时间很短,当kafka集群出现向leader频繁下发metadata信息的情况时,应用会频繁超时报错,此时可能是由于leader与follower同步有积压导致。设计时可以考虑,设计超时参数设置,方便调节应用超时响应时长,也可以加大kafka集群leader与follower的同步时长参数,从而降低频繁的metadata更新,进而处理超时问题。

3 结束语

Kafka技术因其独特的优势,将会为更多系统带来实时传输的应用。并且,它在技术上的实用性很强,可以强有力地推动需要解决高吞吐量、高性能、高实时性要求的系统的开发和设计。计费类业务成为使用Kafka的重要应用,可以促进不同业务需要的拓展,使不同业务都能够利用Kafka得到实现,从而提高了运行效率,推动了系统的信息化发展,对于提高通信运营商的IT系统形成强有力的支撑。

参考文献

[1]王岩,王纯,一种基于Kafka的可靠的Consumer的设计方案[J],软件,2016,37 (01): 61-66.

猜你喜欢
开发应用
高中历史教学中对历史图片的开发及实际应用
河南方言文化资源的保护及其开发利用的研究
遵义红色旅游开发对策研究
单片机在电子技术中的应用和开发
多媒体技术在小学语文教学中的应用研究