CN112698961A - 一种redis分布式锁在kafka分布式程序中的使用方法 - Google Patents
一种redis分布式锁在kafka分布式程序中的使用方法 Download PDFInfo
- Publication number
- CN112698961A CN112698961A CN202011620419.9A CN202011620419A CN112698961A CN 112698961 A CN112698961 A CN 112698961A CN 202011620419 A CN202011620419 A CN 202011620419A CN 112698961 A CN112698961 A CN 112698961A
- Authority
- CN
- China
- Prior art keywords
- lock
- distributed
- task
- setnx
- redis
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 18
- 238000012545 processing Methods 0.000 abstract description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 230000000694 effects Effects 0.000 description 3
- 238000013459 approach Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000010354 integration Effects 0.000 description 2
- 230000007812 deficiency Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种redis分布式锁在kafka分布式程序中的使用方法,涉及数据处理技术领域;该方法包括以下的步骤:S10、部署多节点分布式程序,分布式程序同时从kafka集群上拉取队列文件消费;S20、定时任务定时启动,在redis中用设置SETNX命令做分布式锁;S30、多节点同时设置SETNX分布式锁,当返回值为1时,即设置SETNX分布式锁成功,抢锁成功后,进行后续的任务的执行;S40、多节点共同用SETNX命令设置相同key时,由redis内存机制保证,仅其中最早设置的节点返回值为1,其余节点设置SETNX的返回值为0,则跳过结束定时任务;S50、抢锁成功的节点在执行任务后,释放锁,等待下次定时任务的启动,进行重新抢锁;本发明的有益效果是:通入引入redis中的SETNX命令,保证锁的唯一性。
Description
技术领域
本发明涉及数据处理技术领域,更具体的说,本发明涉及一种redis分布式锁在kafka分布式程序中的使用方法。
背景技术
Kafka是一个分布式流平台,通过解耦数据流,可做到在需要时使用数据。在不需要缓慢集成的情况下,Kafka可将延迟(或每个数据点加载所需的时间)减少到仅10毫秒(与其他集成相比减少约10倍或更多),以此保障其低延迟、高吞吐的性能,即Kafka可实时地提供数据。
Kafka也具备高横向扩展性,支持分布式部署,每一条消息发往对应的Topic,每个Topic对应多个Partition,消费端均采用多线程消费。在现有的java开发中,kafka消费程序都是基于kafka平台的多节点设计,开发完成一套程序可布署在多台机器,多节点,即现在比较流行的分布式程序布署。
多节点布署项目中,有kafka平台保证消息队列的平衡,不重复消费。但现实开发中,消费程序常会有不消费kafka消息队列的场景,比如:常见的定时启动任务生成校验数据,或处理当前消费队列有问题的数据,这些都是不依赖kafka队列的纯程序任务。如果在程序设计中,加入定时启动任务机制,那多节点布署之后,会让多节点程序,到点之后,同时启动任务,重复处理,干一样的活,导致程序性能不高,严重的重复工作会对数据造成不可估量的损失,如重复更新,重复删除操作等。
发明内容
为了克服现有技术的不足,本发明提供一种redis分布式锁在kafka分布式程序中的使用方法。
本发明解决其技术问题所采用的技术方案是:一种redis分布式锁在kafka分布式程序中的使用方法,其改进之处在于,该方法包括以下的步骤:
S10、部署多节点分布式程序,分布式程序同时从kafka集群上拉取队列文件消费;
S20、定时任务定时启动,在redis中用设置SETNX命令做分布式锁;
S30、多节点同时设置SETNX命令时,当返回值为1时,即设置SETNX分布式锁成功,抢锁成功后,进行后续的任务的执行;
S40、多节点共同用SETNX命令设置相同key时,由redis内存机制保证,仅其中最早设置的节点返回值为1,其余节点设置SETNX的返回值为0,则跳过结束定时任务;
S50、抢锁成功的节点在执行任务后,释放锁,等待下次定时任务的启动,进行重新抢锁。
进一步的,步骤S30中,所述后续的任务包括:补充主表中字段为空的数据。
进一步的,步骤S30中,所述后续的任务包括:table_master中补充mercName字段为空的任务。
进一步的,步骤S40中,跳过结束定时任务包括:table_master中补充mercName字段为空的任务。
本发明的有益效果是:本发明的一种redis分布式锁在kafka分布式程序中的使用方法,通入引入redis中的SETNX命令,保证锁的唯一性;采用多节点部署,在任务启动时间段内,只有获取锁的节点,才执行任务,没有获取锁的节点则跳过不执行任务;这种方式程序高效,不会处理相同的工作,因此可以避免了重复执行相同任务、重新更新或者删除的错误操作。
附图说明
图1为本发明的一种redis分布式锁在kafka分布式程序中的使用方法的具体实施例图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。
参照图1所示,本发明揭示了一种redis分布式锁在kafka分布式程序中的使用方法,该方法包括以下的步骤:
S10、部署多节点分布式程序,分布式程序同时从kafka集群上拉取队列文件消费;实现多节点程序部署,共同消费;
S20、定时任务定时启动,在redis中用设置SETNX命令做分布式锁;
S30、多节点同时用SETNX设置相同key时,当返回值为1时,即设置SETNX分布式锁成功,抢锁成功后,进行后续的任务的执行;
在本实施例中,所述后续的任务包括:补充主表中字段为空的数据。
在另一个实施例中,所述后续的任务包括:table_master中补充mercName字段为空的任务。
S40、多节点共同用SETNX命令设置相同key时,由redis内存机制保证,仅其中最早设置的节点返回值为1,其余节点设置SETNX的返回值为0,则跳过结束定时任务;
该步骤中,例如当节点2用SETNX设置相同的key时,返回值为1,其余节点的返回值则为0,节点2成功抢锁,所以只有该节点的定时任务,会执行补充主表中字段为空的数据,例如table_master中补充mercName字段为空的任务;其他节点则会跳过结束定时任务,执行其他的kafka集群队列消费,通过这种方式,增加了消费效率,也避免了重复执行相同任务、重新更新或者删除的错误操作;
S50、抢锁成功的节点在执行任务后,释放锁,等待下次定时任务的启动,进行重新抢锁。
因此,本发明的一种redis分布式锁在kafka分布式程序中的使用方法,通入引入redis中的SETNX命令,保证锁的唯一性;采用多节点部署,在任务启动时间段内,只有获取锁的节点,才执行任务,没有获取锁的节点则跳过不执行任务;这种方式程序高效,不会处理相同的工作,因此可以避免了重复执行相同任务、重新更新或者删除的错误操作。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (4)
1.一种redis分布式锁在kafka分布式程序中的使用方法,其特征在于,该方法包括以下的步骤:
S10、部署多节点分布式程序,分布式程序同时从kafka集群上拉取队列文件消费;
S20、定时任务定时启动,在redis中用设置SETNX命令做分布式锁;
S30、多节点同时设置SETNX分布式锁,当返回值为1时,即设置SETNX分布式锁成功,抢锁成功后,进行后续的任务的执行;
S40、多节点共同用SETNX命令设置相同key时,由redis内存机制保证,仅其中最早设置的节点返回值为1,其余节点设置SETNX的返回值为0,则跳过结束定时任务;
S50、抢锁成功的节点在执行任务后,释放锁,等待下次定时任务的启动,进行重新抢锁。
2.根据权利要求1所述的一种redis分布式锁在kafka分布式程序中的使用方法,其特征在于,步骤S30中,所述后续的任务包括:补充主表中字段为空的数据。
3.根据权利要求1或2所述的一种redis分布式锁在kafka分布式程序中的使用方法,其特征在于,步骤S30中,所述后续的任务包括:table_master中补充mercName字段为空的任务。
4.根据权利要求1所述的一种redis分布式锁在kafka分布式程序中的使用方法,其特征在于,步骤S40中,跳过结束定时任务包括:table_master中补充mercName字段为空的任务。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011620419.9A CN112698961A (zh) | 2020-12-31 | 2020-12-31 | 一种redis分布式锁在kafka分布式程序中的使用方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011620419.9A CN112698961A (zh) | 2020-12-31 | 2020-12-31 | 一种redis分布式锁在kafka分布式程序中的使用方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112698961A true CN112698961A (zh) | 2021-04-23 |
Family
ID=75512902
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011620419.9A Pending CN112698961A (zh) | 2020-12-31 | 2020-12-31 | 一种redis分布式锁在kafka分布式程序中的使用方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112698961A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836161A (zh) * | 2021-09-30 | 2021-12-24 | 紫光云技术有限公司 | 一种利用数据库锁实现定时任务原子性的方法 |
CN115048207A (zh) * | 2022-08-17 | 2022-09-13 | 恒丰银行股份有限公司 | 一种基于固定时间间隔的任务执行方法、设备及介质 |
CN117453150A (zh) * | 2023-12-25 | 2024-01-26 | 杭州阿启视科技有限公司 | 录像存储调度服务多实例的实现方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106170013A (zh) * | 2016-06-29 | 2016-11-30 | 上海浦东发展银行股份有限公司信用卡中心 | 一种基于Redis的Kafka消息唯一性方法 |
CN109582466A (zh) * | 2017-09-29 | 2019-04-05 | 北京金山软件有限公司 | 一种定时任务执行方法、分布式服务器集群及电子设备 |
US20200349172A1 (en) * | 2019-04-30 | 2020-11-05 | Microsoft Technology Licensing, Llc | Managing code and data in multi-cluster environments |
-
2020
- 2020-12-31 CN CN202011620419.9A patent/CN112698961A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106170013A (zh) * | 2016-06-29 | 2016-11-30 | 上海浦东发展银行股份有限公司信用卡中心 | 一种基于Redis的Kafka消息唯一性方法 |
CN109582466A (zh) * | 2017-09-29 | 2019-04-05 | 北京金山软件有限公司 | 一种定时任务执行方法、分布式服务器集群及电子设备 |
US20200349172A1 (en) * | 2019-04-30 | 2020-11-05 | Microsoft Technology Licensing, Llc | Managing code and data in multi-cluster environments |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836161A (zh) * | 2021-09-30 | 2021-12-24 | 紫光云技术有限公司 | 一种利用数据库锁实现定时任务原子性的方法 |
CN113836161B (zh) * | 2021-09-30 | 2023-11-03 | 紫光云技术有限公司 | 一种利用数据库锁实现定时任务原子性的方法 |
CN115048207A (zh) * | 2022-08-17 | 2022-09-13 | 恒丰银行股份有限公司 | 一种基于固定时间间隔的任务执行方法、设备及介质 |
CN117453150A (zh) * | 2023-12-25 | 2024-01-26 | 杭州阿启视科技有限公司 | 录像存储调度服务多实例的实现方法 |
CN117453150B (zh) * | 2023-12-25 | 2024-04-05 | 杭州阿启视科技有限公司 | 录像存储调度服务多实例的实现方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112698961A (zh) | 一种redis分布式锁在kafka分布式程序中的使用方法 | |
CN102279888B (zh) | 一种任务调度方法和系统 | |
US8392920B2 (en) | Parallel query engine with dynamic number of workers | |
CN110489217A (zh) | 一种任务调度方法及系统 | |
CN106681820B (zh) | 基于消息组合的可扩展大数据计算方法 | |
CN108319499B (zh) | 任务调度方法及装置 | |
CN106095540B (zh) | 一种基于Quartz框架的任务流程处理方法 | |
US11176086B2 (en) | Parallel copying database transaction processing | |
CN108958789B (zh) | 一种并行流式计算方法、电子设备、存储介质及系统 | |
CN111026768A (zh) | 一种可实现数据快速装载的数据同步方法和装置 | |
CN107943592B (zh) | 一种面向gpu集群环境的避免gpu资源争用的方法 | |
CN102023899B (zh) | 多线程数据同步方法及装置 | |
CN111158875B (zh) | 基于多模块的多任务处理方法、装置及系统 | |
CN110502337B (zh) | 针对Hadoop MapReduce中混洗阶段的优化系统 | |
CN114218135A (zh) | 一种基于Redis缓存的源端流控方法及系统 | |
CN112596895B (zh) | 一种sql语义感知的弹性倾斜处理方法及系统 | |
CN112965798A (zh) | 一种基于分布式多线程的大数据处理方法及系统 | |
CN110888739B (zh) | 延迟任务的分布式处理方法与装置 | |
CN112181689A (zh) | 一种在云端下进行gpu内核程序高效率调度的运行时系统 | |
CN114116068B (zh) | 服务启动优化方法、装置、电子设备和可读存储介质 | |
CN113901141B (zh) | 一种分布式数据同步方法及系统 | |
CN109144486A (zh) | 一种无状态化的工作流程实现方法 | |
CN112732404A (zh) | 基于Lua协程的程序并发IO优化方法及系统 | |
CN107729211B (zh) | 一种mcu系统的状态响应方法 | |
CN1963766A (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 |