CN106170013A - 一种基于Redis的Kafka消息唯一性方法 - Google Patents

一种基于Redis的Kafka消息唯一性方法 Download PDF

Info

Publication number
CN106170013A
CN106170013A CN201610492940.6A CN201610492940A CN106170013A CN 106170013 A CN106170013 A CN 106170013A CN 201610492940 A CN201610492940 A CN 201610492940A CN 106170013 A CN106170013 A CN 106170013A
Authority
CN
China
Prior art keywords
redis
message
message data
kafka
method based
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
Application number
CN201610492940.6A
Other languages
English (en)
Other versions
CN106170013B (zh
Inventor
马自谦
范桢
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Pudong Development Bank Co Ltd Credit Card Center
Original Assignee
Shanghai Pudong Development Bank Co Ltd Credit Card Center
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Pudong Development Bank Co Ltd Credit Card Center filed Critical Shanghai Pudong Development Bank Co Ltd Credit Card Center
Priority to CN201610492940.6A priority Critical patent/CN106170013B/zh
Publication of CN106170013A publication Critical patent/CN106170013A/zh
Application granted granted Critical
Publication of CN106170013B publication Critical patent/CN106170013B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及一种基于Redis的Kafka消息唯一性方法,利用Redis解决Kafka中消息重复消费的问题,所述方法包括下列步骤:Kafka接收消息数据;采用分布式选举算法,对接收的消息数据进行过滤;对过滤后的消息数据进行业务逻辑处理;判断业务逻辑处理是否出错,若是则删除业务逻辑处理出错的消息数据,若否则正常结束。与现有技术相比,本发明具有避免消息重复消费、吞吐量高以及可靠性高等优点。

Description

一种基于Redis的Kafka消息唯一性方法
技术领域
本发明涉及分布式消息发布-订阅系统,尤其是涉及一种基于Redis的Kafka消息唯一性方法。
背景技术
Apache Kafka是分布式消息发布-订阅系统。与传统的消息服务RabbitMQ、ApacheActiveMQ相比吞吐量提高了几个数量级。目前Kafka已广泛在日志处理等系统中使用。
在Kafka使用中,消息的消费者必须自己维护当前消费的消息的位置,比如将位置保存在Zookeeper中。当消费者处理完一批消息后,先提交消息保存位置,然后再读取和处理下一批消息。这样就造成了一个问题,当消费者崩溃时,位置信息还没来得及保存,下一次读取位置会跟上一次提交之后的位置相同,这样就会导致消息重复消费。
在日志处理等系统中,消息重复消费并不是什么大问题,但对于如交易消息等却是不可接收的。这样就极大的限制了Kafka的使用范围。
发明内容
本发明的目的是针对上述问题提供一种避免消息重复消费、吞吐量高以及可靠性高的基于Redis的Kafka消息唯一性方法方法。
本发明的目的可以通过以下技术方案来实现:
一种基于Redis的Kafka消息唯一性方法,利用Redis解决Kafka中消息重复消费的问题,所述方法包括下列步骤:
1)接收一组消息数据;
2)采用分布式选举算法,对步骤1)接收的消息数据进行过滤;
3)分别对过滤后的每条消息数据进行业务逻辑处理;
4)判断步骤3)中的业务逻辑处理是否出错,若是,则进入步骤5),若否,则正常结束;
5)删除出错的消息数据条目。
所述步骤2),采用分布式选举算法进行过滤具体为:
21)为接收到的每个消息数据设置对应的一个UUID;
22)将同一消息数据分别发送至N个Redis中;
23)对N个Redis中的同一消息数据分别调用SETNX命令,记m为大于N/2的最小整数;
24)判断是否有m或大于m个SETNX命令的返回值为0,若是,则过滤该消息数据,若否,则保留该消息数据。
所述Redis的个数N为奇数。
所述SETNX命令包括key和value,调用所述SETNX命令时,将消息数据对应的UUID赋值给key,将当前时间赋值给value。
所述步骤23),调用SETNX命令后,判断key在Redis中是否已存在,若是,则返回值为0,若否,则返回值为1。
与现有技术相比,本发明具有以下有益效果:
(1)解决了Kafka消息重复问题,并且应用逻辑层无需的修改。
(2)Redis具有高性能,整个系统可以保证极高的吞吐量。
(3)采用多Redis实例集群,可容忍N-1个实例故障,有极高的可靠性。
(4)采用分布式选举算法,保证了数据的可靠性。
(5)多个Redis分别部署在不同的物理实体机上,避免了硬件损坏导致该解决方法不可用。
(6)在消息数据业务逻辑处理出错时,删除对应的消息数据,可以允许系统对这条数据再次处理,提高可靠性。
附图说明
图1为本发明的方法示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。本实施例以本发明技术方案为前提进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
如图1所示,本发明提供了一种基于Redis的Kafka消息唯一性方法,Redis是一个key-value存储系统。它支持多种value类型存储,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型)。利用Redis解决Kafka中消息重复消费的问题,该方法包括下列步骤:
1)Kafka接收一组消息数据。
2)采用分布式选举算法,利用Redis的SETNX命令对步骤1)接收的消息数据进行过滤,具体为:
21)为接收到的消息数据设置一个UUID;
22)将该消息数据分别发送至N个Redis中,N为奇数;
23)对N个Redis中的消息数据分别调用SETNX命令,记m为大于N/2的最小整数;
24)判断是否有m或大于m个SETNX命令的返回值为0,若是则保留该消息数据,若否则过滤该消息数据。
3)对过滤后的每条消息数据进行业务逻辑处理。
4)判断步骤3)中的业务逻辑处理是否出错,若是则进入步骤5),若否则正常结束。
5)调用Redis的DEL命令删除出错的消息数据条目。
SETNX命令包括key和value,调用所述SETNX命令时,将消息数据对应的UUID赋值给key,将当前时间赋值给value。SETNX命令具体为判断key在Redis中是否存在,若是则返回值为0,若否则返回值为1。
步骤2)中使用“分布式选举算法”保证数据可靠性。一份数据会同时写入多个Redis实例(N为奇数),只有当大于N/2个实例操作成功时,才算操作成功。比如N为3,只有当2个或者2个以上实例操作成功时,才算操作成功。多个Redis分别部署在不同的物理实体机上。此算法保证N/2个实例故障,以此来保证系统高可用性。
如取N为5,使用上述步骤解决Kafka重复消息的问题,具体的解决方案为:
由于N为5,因此N/2为2.5,则应使用3个实例。为每个消息都设置一个唯一的UUID。对3个Redis实例分别调用SETNX命令,命令Key为消息UUID,Value为当前时间。如果有2个或者2个以上命令调用返回0,则说明消息未被处理过,系统调用之后的业务逻辑处理代码;否则说明消息已经被处理过,无需执行业务逻辑处理代码。程序根据需求判断业务逻辑处理代码是否运行正常,如果业务逻辑代码处理出错(如调用某个接口失败等),调用Redis的DEL命令删除数据,允许系统对这条数据再次处理。

Claims (5)

1.一种基于Redis的Kafka消息唯一性方法,利用Redis解决Kafka中消息重复消费的问题,其特征在于,所述方法包括下列步骤:
1)接收一组消息数据;
2)采用分布式选举算法,对步骤1)接收的消息数据进行过滤;
3)分别对过滤后的每条消息数据进行业务逻辑处理;
4)判断步骤3)中的业务逻辑处理是否出错,若是,则进入步骤5),若否,则正常结束;
5)删除出错的消息数据条目。
2.根据权利要求1所述的基于Redis的Kafka消息唯一性方法,其特征在于,所述步骤2),采用分布式选举算法进行过滤具体为:
21)为接收到的每个消息数据设置对应的一个UUID;
22)将同一消息数据分别发送至N个Redis中;
23)对N个Redis中的同一消息数据分别调用SETNX命令,记m为大于N/2的最小整数;
24)判断是否有m或大于m个SETNX命令的返回值为0,若是,则过滤该消息数据,若否,则保留该消息数据。
3.根据权利要求2所述的基于Redis的Kafka消息唯一性方法,其特征在于,所述Redis的个数N为奇数。
4.根据权利要求2所述的基于Redis的Kafka消息唯一性方法,其特征在于,所述SETNX命令包括key和value,调用所述SETNX命令时,将消息数据对应的UUID赋值给key,将当前时间赋值给value。
5.根据权利要求4所述的基于Redis的Kafka消息唯一性方法,其特征在于,所述步骤23),调用SETNX命令后,判断key在Redis中是否已存在,若是,则返回值为0,若否,则返回值为1。
CN201610492940.6A 2016-06-29 2016-06-29 一种基于Redis的Kafka消息唯一性方法 Active CN106170013B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610492940.6A CN106170013B (zh) 2016-06-29 2016-06-29 一种基于Redis的Kafka消息唯一性方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610492940.6A CN106170013B (zh) 2016-06-29 2016-06-29 一种基于Redis的Kafka消息唯一性方法

Publications (2)

Publication Number Publication Date
CN106170013A true CN106170013A (zh) 2016-11-30
CN106170013B CN106170013B (zh) 2019-06-07

Family

ID=58064613

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610492940.6A Active CN106170013B (zh) 2016-06-29 2016-06-29 一种基于Redis的Kafka消息唯一性方法

Country Status (1)

Country Link
CN (1) CN106170013B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108322380A (zh) * 2017-01-16 2018-07-24 上海掌门科技有限公司 调用数据的方法和装置以及推送信息的方法和装置
CN109493076A (zh) * 2018-11-09 2019-03-19 武汉斗鱼网络科技有限公司 一种Kafka消息唯一消费方法、系统、服务器及存储介质
CN111949418A (zh) * 2020-07-10 2020-11-17 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN112463403A (zh) * 2020-11-10 2021-03-09 银盛支付服务股份有限公司 一种基于Redis分布式锁重复通知解决的方法
CN112698961A (zh) * 2020-12-31 2021-04-23 银盛支付服务股份有限公司 一种redis分布式锁在kafka分布式程序中的使用方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707585B2 (en) * 2004-11-05 2010-04-27 International Business Machines Corporation Method, system, and program product for monitoring message flow in a message queuing system
CN102668516A (zh) * 2011-12-02 2012-09-12 华为技术有限公司 一种云消息服务中实现消息传递的方法和装置
CN102955717A (zh) * 2012-11-05 2013-03-06 北京奇虎科技有限公司 在分布式消息处理系统中的消息管理设备和方法
CN104754036A (zh) * 2015-03-06 2015-07-01 合一信息技术(北京)有限公司 一种基于kafka的消息处理系统及处理方法
CN105119810A (zh) * 2015-08-06 2015-12-02 北京农信互联科技有限公司 一种基于xmpp协议的即时通讯方法及系统
CN105227662A (zh) * 2015-09-30 2016-01-06 努比亚技术有限公司 消息处理方法、装置和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7707585B2 (en) * 2004-11-05 2010-04-27 International Business Machines Corporation Method, system, and program product for monitoring message flow in a message queuing system
CN102668516A (zh) * 2011-12-02 2012-09-12 华为技术有限公司 一种云消息服务中实现消息传递的方法和装置
CN102955717A (zh) * 2012-11-05 2013-03-06 北京奇虎科技有限公司 在分布式消息处理系统中的消息管理设备和方法
CN104754036A (zh) * 2015-03-06 2015-07-01 合一信息技术(北京)有限公司 一种基于kafka的消息处理系统及处理方法
CN105119810A (zh) * 2015-08-06 2015-12-02 北京农信互联科技有限公司 一种基于xmpp协议的即时通讯方法及系统
CN105227662A (zh) * 2015-09-30 2016-01-06 努比亚技术有限公司 消息处理方法、装置和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
郭俊: "Kafka设计解析(二)- Kafka High Availability", 《技术世界》 *
陈士玉: "合作网站数据资源接入系统的设计与实现", 《中国优秀硕士学位论文全文数据库》 *

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108322380A (zh) * 2017-01-16 2018-07-24 上海掌门科技有限公司 调用数据的方法和装置以及推送信息的方法和装置
CN109493076A (zh) * 2018-11-09 2019-03-19 武汉斗鱼网络科技有限公司 一种Kafka消息唯一消费方法、系统、服务器及存储介质
CN109493076B (zh) * 2018-11-09 2022-06-17 武汉斗鱼网络科技有限公司 一种Kafka消息唯一消费方法、系统、服务器及存储介质
CN111949418A (zh) * 2020-07-10 2020-11-17 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN111949418B (zh) * 2020-07-10 2023-10-24 北京思特奇信息技术股份有限公司 一种订阅消息处理方法和装置
CN112463403A (zh) * 2020-11-10 2021-03-09 银盛支付服务股份有限公司 一种基于Redis分布式锁重复通知解决的方法
CN112698961A (zh) * 2020-12-31 2021-04-23 银盛支付服务股份有限公司 一种redis分布式锁在kafka分布式程序中的使用方法

Also Published As

Publication number Publication date
CN106170013B (zh) 2019-06-07

Similar Documents

Publication Publication Date Title
CN106170013A (zh) 一种基于Redis的Kafka消息唯一性方法
KR20060079078A (ko) 서버 큐잉 시스템 및 방법
EP2921974A1 (en) Data restoration method and system
CN103593257B (zh) 一种数据备份方法及装置
CN110188103A (zh) 数据对账方法、装置、设备和存储介质
CN111585913B (zh) 基于回收令牌的服务流量限制方法及存储介质
US20180121531A1 (en) Data Updating Method, Device, and Related System
CN103503388B (zh) 一种分布式队列消息读取方法及设备、系统
CN113282580A (zh) 用于执行定时任务的方法、存储介质及服务器
CN106250229A (zh) 事件处理的方法及装置
CN108733477B (zh) 数据集群化处理的方法、装置及设备
CN112860412A (zh) 业务数据处理方法、装置、电子设备及存储介质
CN105573867A (zh) 一种MySQL高可用性的实现方法及系统
CN110764705B (zh) 一种数据的读写方法、装置、设备和存储介质
CN104021033A (zh) 一种繁忙处理节点的散列方法和系统
CN116451210A (zh) 权限回收方法、装置、设备及存储介质
CN110535758A (zh) 一种邮件处理方法及装置
CN111338842A (zh) 文件备份方法及装置
CN111767299A (zh) 数据库操作方法、装置、系统、存储介质及电子设备
CN113656374A (zh) 带有附件的业务报文的处理方法及装置
CN106097104A (zh) 一种判断分布式系统下互联网数据完整性的方法和系统
CN112231290A (zh) 一种本地日志的处理方法、装置、设备及存储介质
CN105511813A (zh) 访问服务器磁盘的方法、装置及系统
CN114900531B (zh) 数据同步方法、装置和系统
CN115866017B (zh) 消息处理方法、装置、通信设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant