CN107682169A - 一种利用Kafka集群发送消息的方法和装置 - Google Patents
一种利用Kafka集群发送消息的方法和装置 Download PDFInfo
- Publication number
- CN107682169A CN107682169A CN201610623760.7A CN201610623760A CN107682169A CN 107682169 A CN107682169 A CN 107682169A CN 201610623760 A CN201610623760 A CN 201610623760A CN 107682169 A CN107682169 A CN 107682169A
- Authority
- CN
- China
- Prior art keywords
- message
- cluster
- transmission module
- preferred
- transmission
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/08—Configuration management of networks or network elements
- H04L41/0803—Configuration setting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/214—Monitoring or handling of messages using selective forwarding
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/55—Push-based network services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供一种利用Kafka集群发送消息的方法和装置,能够提高消息发送的效率,保证消息发送的准确性和稳定性。该利用Kafka集群发送消息的方法包括:消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将集群列表里的其他集群作为备选集群,其中优选集群与消息发送模块的网段一致;消息发送模块向优选集群发送消息,其中,当优选集群发生异常时,则向备选集群进行消息发送,并且,如果优选集群不满足失效条件,则在该消息发送完成后,仍向优选集群进行下一条消息的发送,以及当消息发送模块将消息发送给所有集群都失败时,将消息保存到离线日志文件中,使得通过定时抽取离线日志文件中的消息来完成消息发送。
Description
技术领域
本发明涉及计算机和计算机软件技术领域,特别地涉及一种利用Kafka集群发送消息的方法和装置。
背景技术
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的、分区的和可复制的提交日志服务。
Apache Kafka与传统消息系统相比,有以下不同:
1、它被设计为一个分布式系统,易于向外扩展;
2、它同时为发布和订阅提供高吞吐量;
3、它支持多订阅者,当失败时能自动平衡消费者;
4、它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。
Kafka的架构包括以下组件:
话题(Topic)是特定类型的消息流。消息是字节的有效负载(Payload),话题是消息的分类名或种子(Feed)名;
生产者(Producer)是能够发布消息到话题的任何对象;
已发布的消息保存在一组服务器中,它们被称为代理(Broker)或Kafka集群;
消费者可以订阅一个或多个话题,并从Broker拉数据,从而消费这些已发布的消息。
生产者可以选择自己喜欢的序列化方法对消息内容编码。为了提高效率,生产者可以在一个发布请求中发送一组消息。
故而,Kafka被广泛应用于消息的分布式处理中。
现有常用的消息处理模式一般是通过部署Nginx,将集群数据以消息的形式同步发送至Kafka,且配置指向相同的Kafka集群。其中,Nginx是一款轻量级的Web服务器,其特点是占用内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好。
但是采用现有的消息处理模式会存在以下的问题:
1、消息同步发送的方式,会造成数据处理能力低下;
2、消息被发送至单一Kafka机房,当机房出现短暂异常,例如网络抖动,可直接造成客户端发送消息失败,造成该消息无法及时接收;相应的,如果机房出现长时间异常,例如机房断电,则会直接造成大量的客户端发送消息失败,造成消息长时间无法及时接收;
3、原生Kafka客户端并未提供监控功能,当Kafka服务器异常,无法及时预警。
发明内容
有鉴于此,本发明提供一种利用Kafka集群发送消息的方法和装置,能够提高消息发送的效率,保证消息发送的准确性和稳定性。
为实现上述目的,根据本发明的一个方面,提供了一种利用Kafka集群发送消息的方法。
一种利用Kafka集群发送消息的方法,包括:消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;所述消息发送模块向所述优选集群发送消息,其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
可选地,所述消息发送模块在向集群发送消息之前,确认该集群已完成初始化。
可选地,所述消息发送模块向所述备选集群进行消息发送之前,还包括:确认有可用的备选集群。
可选地,所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
可选地,当消息发送失败时,所述消息发送模块将执行以下操作:递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
可选地,通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
根据本发明的另一方面,提供了一种利用Kafka集群发送消息的装置。
一种利用Kafka集群发送消息的装置,包括:启动初始单元,用于消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;消息发送单元,用于所述消息发送模块向所述优选集群发送消息,其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
可选地,所述消息发送单元在所述消息发送模块向集群发送消息之前,确认该集群已完成初始化。
可选地,所述消息发送单元在所述消息发送模块向所述备选集群进行消息发送之前,还用于:确认有可用的备选集群。
可选地,所述消息发送单元在所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
可选地,所述消息发送单元还用于当消息发送失败时,所述消息发送模块将执行以下操作:递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
可选地,所述消息发送单元还用于:通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
根据本发明的又一方面,提供了一种利用Kafka集群发送消息的装置。
一种利用Kafka集群发送消息的装置,包括:存储器和处理器,其中,所述存储器存储指令;所述处理器执行所述指令用于:消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;所述消息发送模块向所述优选集群发送消息,其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
可选地,所述处理器还用于在所述消息发送模块在向集群发送消息之前,确认该集群已完成初始化。
可选地,所述处理器还用于在所述消息发送模块向所述备选集群进行消息发送之前,确认有可用的备选集群。
可选地,所述处理器还用于所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
可选地,所述处理器还用于当消息发送失败时,所述消息发送模块将执行以下操作:递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
可选地,所述处理器还用于通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
根据本发明的技术方案,通过在多个机房部署多个Kafka集群,可以保证当某一集群出现问题时,消息发送模块会立刻切换至向其他集群进行消息的发送,从而保证了消息发送的准确性;优先向优选集群进行消息发送,可以保证消息发送的效率;当所有集群都不可用时,将消息记录在离线日志文件中,可以保证数据的稳定性。
附图说明
附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
图1是现有技术中Kafka的系统架构示意图;
图2是本发明实施例的系统架构图;
图3是根据本发明实施例的利用Kafka集群发送消息的方法的主要步骤示意图;
图4是本发明实施例的消息发送模块发送消息的流程示意图;
图5是本发明实施例的获取可用的集群的流程示意图;
图6是本发明实施例的消息发送失败处理流程示意图;
图7是本发明实施例的失效集群恢复流程示意图;
图8是根据本发明一个实施例的利用Kafka集群发送消息的装置的主要模块示意图;
图9是根据本发明另一个实施例的利用Kafka集群发送消息的装置的主要模块示意图。
具体实施方式
以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
为了解决现有技术中所述的传统发布消息方式中,单一Kafka机房(集群)异常,而导致的消息无法及时接收和预警的问题,本发明提出在不同机房准备不同的Kafka集群,使用Nginx作为Web服务器,接收客户端发送过来的消息,这些消息最终通过部署在Nginx上的消息发送模块发送到Kafka集群。
为了保证Kafka集群的生产客户端尽可能快速发送消息,本发明使用Nginx+Lua+Librdkafka的架构异步处理消息发送,并在接收到客户端发送的消息后,立即通知客户端结束会话;为了保证消息发送最快,数据尽可能发送到在本机房的Kafka集群;为了保证数据消费最快,即便本机房Kafka集群出现问题,也可以发送到其他机房的Kafka集群;为了保证数据稳定性,当出现所有机房Kafka集群宕机的极端情况时,消息可以落入本地Nginx上配置的离线日志文件中。
如图2所示,是本发明实施例的系统架构图。其中,与Nginx集群在相同机房的Kafka集群被称为优选集群,其他机房的Kafka集群作为备选集群,通过优先发送消息到优选集群以保证发布效率;采用优选集群+备选集群发送消息的模式,无论Kafka机房异常与否,保证消息都要发送到Kafka集群,从而保证消息的实时性;另外,本发明可同时监控优选集群,当优选集群出现异常时,可报警以便及时进行优选集群的恢复,保证消息发布效率;本发明还可以实时查看Nginx中消息发送模块的状态数据(例如:内部延迟,平均交易耗时等)。
为此,本发明提出如下的技术方案:集群Nginx上部署的消息发送模块在启动的时候会从预先配置的Kafka集群列表里,选择一个集群作为优选集群,其他集群按照为集群编制的先后顺序作为备选集群。正常的消息发布都是向优选集群发送的,当优选集群发生异常情况,例如网络抖动,Kafka服务器响应延迟,Kafka服务器宕机等,导致消息发送模块没有成功发布该消息时,消息发送模块会向下一个备选集群进行该消息的发送,并且,如果优选集群不满足失效条件,则在该消息发送完成后,仍向优选集群进行下一条消息的发送,当所有备选集群都发送失败时,该消息会落入到Nginx上配置的离线日志文件中,通过定时抽取离线日志文件并重新发送给Kafka集群,以完成最终消息闭环,保证消息发布的正确性和稳定性。
当优选集群发生宕机等灾难性故障时,会自动切换发布消息到下一个备选集群,并定时尝试发布消息到优选集群,一旦优选集群恢复,立刻切换回向优选集群进行消息的发送,从而最大地保障消息发送的高效性和稳定性。
另外,本发明还可以提供监控预警,当优选集群出现宕机等灾难性故障时,发监控报警信息进行提示,以便尽快修复优选集群,保证消息发布的效率。
图3是根据本发明实施例的利用Kafka集群发送消息的方法的主要步骤示意图。如图3所示,本发明的利用Kafka集群发送消息的方法主要包括如下的步骤S31和步骤S32。
步骤S31:消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将集群列表里的其他集群作为备选集群,其中优选集群与消息发送模块的网段一致。
其中,Kafka集群地址列表需要提供不同集群的集群地址,以便当其中一个优选Kafka集群地址无法访问时,还可以路由到另外一个集群地址。例如,有如下的Kafka集群地址列表:
local cluster_list={//所有可用Kafka集群ip地址
[1]="192.168.147.105:9092,192.168.147.106:9092,192.168.147.107:9092",//Kafka集群ip地址
[2]="192.168.144.118:9094,192.168.144.118:9092,192.168.144.118:9093"//Kafka集群ip地址
}
其中,每个Kafka集群ip地址具有编号1、2、…。并且,在后续进行Kafka集群选定时,将根据编号由小到大依次选定。
消息发送模块在初始化的时候,会根据当前Nginx服务器的ip地址,从Kafka集群地址列表(上例中的cluster_list)中匹配一个与自己网段一致的Kafka集群作为优选集群,其他Kafka集群作为备选集群。采用本发明的技术方案,对于任意一个Nginx服务器,无需修改或者重新配置Kafka集群地址列表,均可自动匹配优选集群,并排序备选集群。
另外,如果Kafka集群地址列表(上例中的cluster_list)为空,则启动失败,无法进行消息发布。
步骤S32:消息发送模块向优选集群发送消息,其中,当优选集群发生异常时,则向备选集群进行消息发送,并且,如果优选集群不满足失效条件,则在该消息发送完成后,仍向优选集群进行下一条消息的发送,以及当消息发送模块将消息发送给所有集群都失败时,将消息保存到离线日志文件中,使得通过定时抽取离线日志文件中的消息来完成消息发送。
根据本发明的技术方案,所述消息发送模块在向集群发送消息之前,确认该集群已完成初始化。
所述消息发送模块向所述备选集群进行消息发送之前,还需要确认有可用的备选集群。
如图4所示,为本发明实施例的消息发送模块发送消息的流程示意图。本发明中,当消息发送模块每次发送消息时,都需要先确定有可用的Kafka集群,如果无可用的Kafka集群(例如:所有的Kafka集群都宕机的情况),则直接将消息记录到离线日志文件中。
在有可用的集群的情况下,消息发送模块将从配置的Kafka集群地址列表中获取可用的集群,然后向该集群进行消息的发送。在消息发送之前,需要判断该集群是否已完成初始化,若已完成初始化则发送消息,否则将执行该集群的初始化过程,并在初始化完成后再向该集群发送消息。其中,获取可用的集群的流程如图5所示。
对Kafka集群的初始化可通过调用Kafka集群提供的工具包进行,主要可以包括以下几个步骤:
实例化一个Kafka消息生产者;
获取要初始化的Kafka集群地址;
初始化Kafka集群和Kafka消息生产者的连接;
设置Kafka失败回调方法。
如图5所示,为本发明实施例的获取可用的集群的流程示意图。本发明中,当有任意集群出现消息发送失败的情况时,都需要获取可用的集群来进行该消息的重新发送。当消息发送模块向优选集群发送消息失败时,将向获取的可用的备选集群进行消息的重新发送;当消息发送模块向某一备选集群发送消息失败时,将向获取的可用的优选集群或者备选集群进行消息的重新发送。
如图5所示,在获取可用的集群时,首先需判断优选集群是否可用,如果优选集群可用,则返回优选集群为获取的可用集群;如果优选集群不可用,则判断备选集群是否有可用集群。
如果备选集群中有可用的集群,则根据备选集群ip地址的编号(如1、2、…),按从小到大的顺序,选取可用的第一个集群为获取的可用集群;如果备选集群中没有可用的集群,则返回无可用集群。
根据本发明的技术方案,当无可用集群时,会将该消息记录在离线日志中,以便定时读取离线日志数据完成消息的发送。
其中,所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
根据本发明的技术方案,当消息发送失败时,消息发送模块将执行以下操作:
递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;
如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;
如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;
其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
如图6所示,为本发明实施例的消息发送失败处理流程示意图。
进入该流程,一定是向当前Kafka集群发送消息失败了。消息发送失败的情况包括很多,例如:网络抖动等。当发生网络抖动时,该消息是无法发送到Kafka集群的,因此认为该消息发送失败。
当消息发送失败时,首先递增当前集群的消息发送失败次数,例如将当前Kafka集群记录的消息发送失败次数加一;然后判断当前Kafka集群是否满足失效条件。其中,失效条件例如是:当向某个Kafka集群发送消息失败次数在向该Kafka集群发送消息的总数中达到一定占比阈值时,即可设置该集群失效。其中,占比阈值可根据系统运行的需要进行配置。
如果该当前集群满足失效条件,则设置当前Kafka集群状态为失效,并将当前时间记录为失效时间,然后向下一个可用的集群重新发送该消息。其中,获取可用的集群的流程请参见图5。特别的是,当设置当前集群状态为失效时,还可以判断该当前集群是否是优选集群,如果是优选集群,则发送报警信息通知管理员优选集群异常,以便可以及时进行优选集群的维修恢复,以保证消息发布的效率。
如果该当前集群不满足失效条件,则向下一个可用的备选集群重发该条消息后,再返回向该当前集群进行下一条消息的发布,以便保证消息发送的效率和稳定性。其中,获取可用的集群的流程请参见图5。
其中,当没有可用的集群时,则将所述消息保存在离线日志文件中。
另外,本发明中通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
如图7所示,为本发明实施例的失效集群恢复流程示意图。使用定时任务来对失效集群进行恢复,例如可设置每分钟运行一次,其中,定时任务的执行周期可配置。
定时任务根据执行周期循环处理失效集群。
如果存在失效集群,则当该集群记录的失效时间达到已设置的阈值时将该集群恢复为可用,否则,不恢复该集群,继续处理下一个失效集群。例如,可设置当集群记录的失效时间距离当前时间已经超过10分钟时,即设置当前集群的消息发送错误个数为0,并设置当前集群为可用。
如果不存在失效集群,则退出该定时任务。
根据前述的步骤S31和步骤S32所述的技术方案,即可达到以下效果:
1、集群统一部署:消息发送模块初始化时会自动选择一个与相同机房的Kafka集群作为优选集群,其余机房作为备选集群;
2、多机房容灾:当优选集群出现问题,消息发送模块可以立刻切换到备选集群;
3、监控功能:当优选集群出现宕机,消息发送模块发送报警通知负责人。
图8是根据本发明一个实施例的利用Kafka集群发送消息的装置的主要模块示意图。如图8所示,本发明的利用Kafka集群发送消息的装置80主要包括启动初始单元81和消息发送单元82。
其中,启动初始单元81用于消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;消息发送单元82用于所述消息发送模块向所述优选集群发送消息,其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
根据本发明的实施例的技术方案,消息发送单元82在所述消息发送模块向集群发送消息之前,确认该集群已完成初始化。
消息发送单元82在所述消息发送模块向所述备选集群进行消息发送之前,还可以用于:确认有可用的备选集群。
消息发送单元82在所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
消息发送单元82还可以用于当消息发送失败时,所述消息发送模块将执行以下操作:递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
消息发送单元82还可以用于:通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
图9是根据本发明另一个实施例的利用Kafka集群发送消息的装置的主要模块示意图。如图9所示,本发明的利用Kafka集群发送消息的装置90主要包括存储器91和处理器92。
其中,存储器91存储指令;处理器92执行所述指令用于:消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;所述消息发送模块向所述优选集群发送消息,其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
根据本发明的实施例,处理器92还可以用于在所述消息发送模块在向集群发送消息之前,确认该集群已完成初始化。
处理器92还可以用于在所述消息发送模块向所述备选集群进行消息发送之前,确认有可用的备选集群。
处理器92还可以用于所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
处理器92还可以用于当消息发送失败时,所述消息发送模块将执行以下操作:递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
处理器92还可以用于通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
根据本发明实施例的技术方案,通过在多个机房部署多个Kafka集群,可以保证当某一集群出现问题时,消息发送模块会立刻切换至向其他集群进行消息的发送,从而保证了消息发送的准确性;优先向优选集群进行消息发送,可以保证消息发送的效率;当所有集群都不可用时,将消息记录在离线日志文件中,可以保证数据的稳定性。
使用本发明的技术方案,可保证大部分情况下消息数据可通过Kafka集群进行发布,极端情况下才会记录到日志文件。当一个Kafka机房发生灾难性故障时,仍可保证数据的正常传输。
本发明使用Nginx+Lua+Librdkafka的架构异步处理消息,可使并发消息个数成倍增加;同时,由于增加了多机房容灾及监控,大大提升了消息发布的准确性。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (13)
1.一种利用Kafka集群发送消息的方法,其特征在于,包括:
消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;
所述消息发送模块向所述优选集群发送消息,
其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及
当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
2.根据权利要求1所述的方法,其特征在于,所述消息发送模块在向集群发送消息之前,确认该集群已完成初始化。
3.根据权利要求1所述的方法,其特征在于,所述消息发送模块向所述备选集群进行消息发送之前,还包括:
确认有可用的备选集群。
4.根据权利要求1所述的方法,其特征在于,所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
5.根据权利要求1所述的方法,其特征在于,当消息发送失败时,所述消息发送模块将执行以下操作:
递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;
如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;
如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;
其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
6.根据权利要求1或5所述的方法,其特征在于,通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
7.一种利用Kafka集群发送消息的装置,其特征在于,包括:
启动初始单元,用于消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;
消息发送单元,用于所述消息发送模块向所述优选集群发送消息,
其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及
当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
8.根据权利要求7所述的装置,其特征在于,所述消息发送单元在所述消息发送模块向集群发送消息之前,确认该集群已完成初始化。
9.根据权利要求7所述的装置,其特征在于,所述消息发送单元在所述消息发送模块向所述备选集群进行消息发送之前,还用于:
确认有可用的备选集群。
10.根据权利要求7所述的装置,其特征在于,所述消息发送单元在所述消息发送模块向所述备选集群进行消息发送时,按照一定时间周期尝试向所述优选集群发送消息,如果所述优选集群恢复,则立刻切换至向所述优选集群发送消息。
11.根据权利要求7所述的装置,其特征在于,所述消息发送单元还用于当消息发送失败时,所述消息发送模块将执行以下操作:
递增当前集群的消息发送失败次数,并判断该当前集群是否满足失效条件;
如果所述当前集群满足所述失效条件,则设置所述当前集群失效,并向下一个可用的集群重新发送该消息,其中,如果所述当前集群是优选集群则发出报警信息;
如果所述当前集群不满足所述失效条件,则向下一个可用的集群重新发送该消息,并在该消息发送完成后,仍向所述当前集群进行下一条消息的发送;
其中,当没有可用的集群时,将所述消息保存在离线日志文件中。
12.根据权利要求7或11所述的装置,其特征在于,所述消息发送单元还用于:
通过设置定时任务,周期性判断失效集群的失效时间是否已达到设置的阈值,以对所述失效集群进行恢复。
13.一种利用Kafka集群发送消息的装置,其特征在于,包括:
存储器和处理器,其中,
所述存储器存储指令;
所述处理器执行所述指令用于:
消息发送模块启动时,从预先配置的Kafka集群列表里选择优选集群,并将所述集群列表里的其他集群作为备选集群,其中所述优选集群与所述消息发送模块的网段一致;
所述消息发送模块向所述优选集群发送消息,
其中,当所述优选集群发生异常时,则向所述备选集群进行消息发送,并且,如果所述优选集群不满足失效条件,则在该消息发送完成后,仍向所述优选集群进行下一条消息的发送,以及
当所述消息发送模块将消息发送给所有集群都失败时,将所述消息保存到离线日志文件中,使得通过定时抽取所述离线日志文件中的消息来完成消息发送。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610623760.7A CN107682169B (zh) | 2016-08-02 | 2016-08-02 | 一种利用Kafka集群发送消息的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610623760.7A CN107682169B (zh) | 2016-08-02 | 2016-08-02 | 一种利用Kafka集群发送消息的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107682169A true CN107682169A (zh) | 2018-02-09 |
CN107682169B CN107682169B (zh) | 2021-03-30 |
Family
ID=61133911
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610623760.7A Active CN107682169B (zh) | 2016-08-02 | 2016-08-02 | 一种利用Kafka集群发送消息的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107682169B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108810150A (zh) * | 2018-06-15 | 2018-11-13 | 国网上海市电力公司 | 协同办公系统应用级灾备系统的数据复制方法 |
CN110515741A (zh) * | 2018-05-21 | 2019-11-29 | 北京京东尚科信息技术有限公司 | 一种基于本地任务队列的降级处理方法和装置 |
CN111371586A (zh) * | 2018-12-26 | 2020-07-03 | 顺丰科技有限公司 | 日志数据传输方法、装置和设备 |
CN111555957A (zh) * | 2020-03-26 | 2020-08-18 | 孩子王儿童用品股份有限公司 | 一种基于Kafka的同步消息服务系统及实现方法 |
CN115102924A (zh) * | 2022-06-25 | 2022-09-23 | 平安银行股份有限公司 | 集群地址切换方法、装置、计算机设备及存储介质 |
CN115269725A (zh) * | 2022-07-25 | 2022-11-01 | 中电金信软件有限公司 | 一种基于消息中间件集群的数据同步方法及系统 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130290450A1 (en) * | 2012-04-30 | 2013-10-31 | Webtrends Inc. | Method and system that streams real-time, processed data from remote processor-controlled appliances |
US20140156806A1 (en) * | 2012-12-04 | 2014-06-05 | Marinexplore Inc. | Spatio-temporal data processing systems and methods |
US20150081389A1 (en) * | 2013-05-13 | 2015-03-19 | Webtrends, Inc. | Method and system that identify market segments and that facilitate targeted information distribution |
CN104486107A (zh) * | 2014-12-05 | 2015-04-01 | 曙光信息产业(北京)有限公司 | 一种日志采集装置及方法 |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
WO2015187566A1 (en) * | 2014-06-06 | 2015-12-10 | Crowdstrike, Inc. | Real-time model of states of monitored devices |
-
2016
- 2016-08-02 CN CN201610623760.7A patent/CN107682169B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130290450A1 (en) * | 2012-04-30 | 2013-10-31 | Webtrends Inc. | Method and system that streams real-time, processed data from remote processor-controlled appliances |
US20140156806A1 (en) * | 2012-12-04 | 2014-06-05 | Marinexplore Inc. | Spatio-temporal data processing systems and methods |
US20150081389A1 (en) * | 2013-05-13 | 2015-03-19 | Webtrends, Inc. | Method and system that identify market segments and that facilitate targeted information distribution |
WO2015187566A1 (en) * | 2014-06-06 | 2015-12-10 | Crowdstrike, Inc. | Real-time model of states of monitored devices |
CN104486107A (zh) * | 2014-12-05 | 2015-04-01 | 曙光信息产业(北京)有限公司 | 一种日志采集装置及方法 |
CN104754036A (zh) * | 2015-03-06 | 2015-07-01 | 合一信息技术(北京)有限公司 | 一种基于kafka的消息处理系统及处理方法 |
Non-Patent Citations (2)
Title |
---|
杨冬晖: ""一种分布式消息队列的可靠性研究"", 《电脑知识与技术》 * |
王岩 等: "一种基于Kafka的可靠的Consumer的设计方案", 《设计研究与应用》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110515741A (zh) * | 2018-05-21 | 2019-11-29 | 北京京东尚科信息技术有限公司 | 一种基于本地任务队列的降级处理方法和装置 |
CN108810150A (zh) * | 2018-06-15 | 2018-11-13 | 国网上海市电力公司 | 协同办公系统应用级灾备系统的数据复制方法 |
CN108810150B (zh) * | 2018-06-15 | 2020-11-27 | 国网上海市电力公司 | 协同办公系统应用级灾备系统的数据复制方法 |
CN111371586A (zh) * | 2018-12-26 | 2020-07-03 | 顺丰科技有限公司 | 日志数据传输方法、装置和设备 |
CN111371586B (zh) * | 2018-12-26 | 2023-01-10 | 顺丰科技有限公司 | 日志数据传输方法、装置和设备 |
CN111555957A (zh) * | 2020-03-26 | 2020-08-18 | 孩子王儿童用品股份有限公司 | 一种基于Kafka的同步消息服务系统及实现方法 |
CN115102924A (zh) * | 2022-06-25 | 2022-09-23 | 平安银行股份有限公司 | 集群地址切换方法、装置、计算机设备及存储介质 |
CN115102924B (zh) * | 2022-06-25 | 2023-09-19 | 平安银行股份有限公司 | 集群地址切换方法、装置、计算机设备及存储介质 |
CN115269725A (zh) * | 2022-07-25 | 2022-11-01 | 中电金信软件有限公司 | 一种基于消息中间件集群的数据同步方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN107682169B (zh) | 2021-03-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107682169A (zh) | 一种利用Kafka集群发送消息的方法和装置 | |
Meza et al. | A large scale study of data center network reliability | |
US6934880B2 (en) | Functional fail-over apparatus and method of operation thereof | |
CN103744809B (zh) | 基于vrrp的车辆信息管理系统双机热备方法 | |
EP1697843B1 (en) | System and method for managing protocol network failures in a cluster system | |
US7539150B2 (en) | Node discovery and communications in a network | |
CN110601903B (zh) | 一种基于消息队列中间件的数据处理方法及装置 | |
CN105095008B (zh) | 一种适用于集群系统的分布式任务故障冗余方法 | |
CN111949444A (zh) | 一种基于分布式服务集群的数据备份与恢复系统及方法 | |
CN113794597B (zh) | 告警信息处理方法、系统、电子设备及存储介质 | |
CN111031341A (zh) | 一种基于心跳的双机热备方法 | |
CN112506702A (zh) | 数据中心容灾方法、装置、设备及存储介质 | |
CN110677282A (zh) | 一种分布式系统的热备份方法及分布式系统 | |
CN111198662A (zh) | 一种数据存储方法、装置和计算机可读存储介质 | |
US8463945B2 (en) | Method for synchronizing local clocks in a distributed computer network | |
CN111708659B (zh) | 一种基于kubernetes构建云原生容灾架构的方法 | |
CN110971662A (zh) | 一种基于Ceph的两节点高可用实现方法及装置 | |
CN102055605A (zh) | 一种应用于aaa服务器的容灾系统及方法 | |
CN105490847B (zh) | 一种私有云存储系统中节点故障实时检测及处理方法 | |
CN111865632A (zh) | 分布式数据存储集群的切换方法及切换指令发送方法和装置 | |
JP6421516B2 (ja) | サーバ装置、冗長構成サーバシステム、情報引継プログラム及び情報引継方法 | |
CN113055203A (zh) | Sdn控制平面的异常恢复方法及装置 | |
CN114598593B (zh) | 消息处理方法、系统、计算设备及计算机存储介质 | |
CN102480366A (zh) | 一种关于会议系统软件的双机热备份运行方法 | |
CN115964136A (zh) | 一种定时任务执行方法、服务端、客户端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |