CN111930538A - 一种基于kafka集群的生产与消费的方法 - Google Patents

一种基于kafka集群的生产与消费的方法 Download PDF

Info

Publication number
CN111930538A
CN111930538A CN202010760097.1A CN202010760097A CN111930538A CN 111930538 A CN111930538 A CN 111930538A CN 202010760097 A CN202010760097 A CN 202010760097A CN 111930538 A CN111930538 A CN 111930538A
Authority
CN
China
Prior art keywords
message
setting
kafka
topic
partition
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
Application number
CN202010760097.1A
Other languages
English (en)
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.)
Yinsheng Payment Service Co Ltd
Original Assignee
Yinsheng Payment Service Co Ltd
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 Yinsheng Payment Service Co Ltd filed Critical Yinsheng Payment Service Co Ltd
Priority to CN202010760097.1A priority Critical patent/CN111930538A/zh
Publication of CN111930538A publication Critical patent/CN111930538A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2023Failover techniques
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于kafka集群的生产与消费的方法,涉及信息处理技术领域;该方法包括以下的步骤:S1、消息提交规则的设置;S2、对消息自动重试规则进行设置;S3、主题topic的副本数设置,对主题topic的副本数进行设置,使其大于或等于3;S4、对消息写入副本的数量进行设置,保证主题topic的副本数大于消息写入副本的数量;S5、确保消息消费完成后再提交偏移量Offset;S6、多服务器的线程设置,通过统计多种数据主题topic的分区数partition,采用下列公式计算:P/n=concurrency,其中P为总的分区数partition的数据,n为服务器的数量,concurrency为线程数;本发明的有益效果是:杜绝了单一服务器不稳定导致数据出现波动的情况,解决数据一致性及单点故障问题。

Description

一种基于kafka集群的生产与消费的方法
技术领域
本发明涉及消息处理技术领域,更具体的说,本发明涉及一种基于kafka集群的生产与消费的方法。
背景技术
Kafka是一种分布式发布-订阅消息系统,具备高吞吐量、持久化、副本集机制、分布式支持横向扩展等特性。对生产者和消费者的设计完全解耦,流量可削峰、消息处理可做到异步。现在它已被很多公司作为多种类型的数据管道和消息系统使用。
为了更好的说明及理解本发明的技术方案,对Kafka的基础概念作如下介绍:
1、生产者与消费者
对于Kafka来说客户端有两种基本类型,包括:生产者(Producer)、消费者(Consumer),生产者(也称为发布者)创建消息,而消费者(也称为订阅者)负责消费消息。
2、主题(Topic)与分区(Partition)
在Kafka中,消息以主题(Topic)来分类,每一个主题都对应一个「消息队列」,即类似于数据库中的表。但是如果把所有同类的消息都塞入到一个“中心”队列中,势必缺少可伸缩性,无论是生产者/消费者数目的增加,还是消息数量的增加,都可能耗尽系统的性能或存储。对于此问题,本方案中引入了分区(Partition)的概念完成了水平扩展。
3、Broker和集群(Cluster)
一个Kafka服务器也称为Broker,它接受生产者发送的消息并存入磁盘,Broker同时服务消费者拉取分区消息的请求,返回目前已经提交的消息。使用特定的机器硬件,一个Broker每秒可以处理成千上万的分区和百万量级的消息。若干个Broker组成一个集群(Cluster),其中集群内某个Broker会成为集群控制器(Cluster Controller),它负责管理集群,包括分配分区到Broker、监控Broker故障等。在集群内,一个分区由一个Broker负责,这个Broker也称为这个分区的Leader。当然一个分区可以被复制到多个Broker上来实现冗余,这样当存在Broker故障时可以将其分区重新分配到其他Broker来负责。
在信息爆炸的数据时代,采用传统离线方式处理数据已难以满足数据的实时性要求。Kafka基于其独特的优势,可用来解决百万级别的数据生产者和消费者之间的无缝对接,并达到实时性要求。但在支付行业中,使用Kafka处理基础业务数据,则存在以下不足:
(1)在Kafka Broker确认Ack时,若出现网络异常、FullGC、OOM等问题时,易导致Ack超时,Kafka Producer会对数据重复发送,最终出现数据重复推送。
(2)在Kafka消费端出现异常,部分消费信息未及时提交offset时,易导致数据重复消费。
(3)同一条数据因各种客观存在的问题可能被计算或处理多次,最终导致数据与预期出现极大的偏差。
(4)若Kafka消费端仅使用单节点部署,容易导致单点故障,出现数据丢失,影响数据的实时性、一致性;同时,对于系统的稳定性也非常致命。
发明内容
为了克服现有技术的不足,本发明提供一种基于kafka集群的生产与消费的方法,该方法通过架设多服务器,杜绝了单一服务器不稳定导致数据出现波动的情况,解决数据一致性及单点故障问题。
本发明解决其技术问题所采用的技术方案是:一种基于kafka集群的生产与消费的方法,其改进之处在于,该方法包括以下的步骤:
S1、消息提交规则的设置,该规则为所有副本Broker都要接收到消息,该消息才能提交成功;
S2、对消息自动重试规则进行设置,当出现网络抖动,使Kafka Producer自动重试消息发送,避免消息丢失;
S3、主题topic的副本数设置,对主题topic的副本数进行设置,使其大于或等于3;
S4、对消息写入副本的数量进行设置,控制消息至少要被写入1个以上的副本才能提交成功,保证主题topic的副本数大于消息写入副本的数量;
S5、确保消息消费完成后再提交偏移量Offset;
S6、多服务器的线程设置,通过统计多种数据主题topic的分区数partition,采用下列公式计算:P/n=concurrency,其中P为总的分区数partition的数据,n为服务器的数量,concurrency为线程数。
进一步的,所述的步骤S1中,令Kafka Producer中参数acks=all。
进一步的,所述的步骤S2中,令Kafka Producer中参数retries=5。
进一步的,所述的步骤S3中,令replication.factor≥3。
进一步的,所述的步骤S4中,令min.insync.replicas>1。
进一步的,所述的步骤S5中,所述主题topic的副本数的参数为replication.factor,消息写入副本的数量的参数为min.insync.replicas,确保replication.factor>min.insync.replicas。
进一步的,令replication.factor=min.insync.replicas+1。
进一步的,所述的步骤S6中,令Kafka Consumer端的参数enbale.auto.commit为false,以保证数据不会重复消费。
本发明的有益效果是:Kafka生产端不重复发送,保证数据有且只发送一次;架设多服务器部署模型,横向扩展多台服务终端部署,杜绝单一服务器不稳定导致数据出现波动的情况,解决数据一致性及单点故障问题。
附图说明
图1为本发明的一种基于kafka集群的生产与消费的方法的流程示意图。
图2为本发明的一种基于kafka集群的生产与消费的方法的框架结构图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。
参照图1、图2,本发明揭示了一种基于kafka集群的生产与消费的方法,该方法通过对生产端、消费端以及架设多服务器部署模型,横向扩展多台服务器终端部署,杜绝了单一服务器不稳定导致数据出现波动的情况,解决数据一致性及单点故障问题。
本实施例中,该方法包括生产端的设计方法、消费端设计方法以及架设多服务器部署模型的方法,其中,生产端的设计方法包括以下的步骤:
S1、消息提交规则的设置,该规则为所有副本Broker都要接收到消息,该消息才能提交成功;
在该步骤中,令Kafka Producer中参数acks=all;
S2、对消息自动重试规则进行设置,当出现网络抖动,使Kafka Producer自动重试消息发送,避免消息丢失;
本实施例中,令Kafka Producer中参数retries=5,通过该步骤,对KafkaProducer的自动重试机制进行设置;
S3、主题topic的副本数设置,对主题topic的副本数进行设置,使其大于或等于3;
S4、对消息写入副本的数量进行设置,控制消息至少要被写入1个以上的副本才能提交成功,保证主题topic的副本数大于消息写入副本的数量;
进一步的,所述的消费端设计方法包括步骤S5:
S5、确保消息消费完成后再提交偏移量Offset;所述主题topic的副本数的参数为replication.factor,令replication.factor≥3;消息写入副本的数量的参数为min.insync.replicas,令min.insync.replicas>1;确保replication.factor>min.insync.replicas;在本实施例中,即令replication.factor=min.insync.replicas+1;
另外,架设多服务器部署模型的方法包括步骤S6:
S6、多服务器的线程设置,通过统计多种数据主题topic的分区数partition,采用下列公式计算:P/n=concurrency,其中P为总的分区数partition的数据,n为服务器的数量,concurrency为线程数;
所述的步骤S6中,令Kafka Consumer端的参数enbale.auto.commit为false,以保证数据不会重复消费。
参照图2所示,对于kafka集群的工作过程进行描述,其步骤1为生产端producer发送数据到kafka集群,步骤2为kafka内部,在不同的broker上追加数据;步骤3为数据发送过程中,通过消息确认机制,可以得到一个是否成功的结果给生产端producer;步骤4为,如果出现异常情况时,生产端会重新发送数据到kafka集群。
通过上述方法和结构,本发明的一种基于kafka集群的生产与消费的方法,具有以下的优点:
1、Kafka生产端不重复发送,保证数据有且只发送一次;
2、kafka消费端数据的不重复消费,引入幂等性算法确保消费端不重复消费数据,从而保障数据的一致性;在本实施例中,每个新的生产端Producer初始化时,会分配一个唯一的ProducerID,对于每个ProducerID,生产端Producer发送数据的每个Topic和Partition都对应一个从0开始单调递增的SequenceNumber值。在每条消息中附带了ProducerID和SequenceNumber,相同的ProducerID和SequenceNumber发送给Broker,而之前Broker缓存过之前发送的相同的消息,那么在消息流中的消息就只有一条,不会出现重复发送的情况。
3、架设多服务器部署模型,横向扩展多台服务终端部署,杜绝单一服务器不稳定导致数据出现波动的情况,解决数据一致性及单点故障问题。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。

Claims (8)

1.一种基于kafka集群的生产与消费的方法,其特征在于,该方法包括以下的步骤:
S1、消息提交规则的设置,该规则为所有副本Broker都要接收到消息,该消息才能提交成功;
S2、对消息自动重试规则进行设置,当出现网络抖动,使Kafka Producer自动重试消息发送,避免消息丢失;
S3、主题topic的副本数设置,对主题topic的副本数进行设置,使其大于或等于3;
S4、对消息写入副本的数量进行设置,控制消息至少要被写入1个以上的副本才能提交成功,保证主题topic的副本数大于消息写入副本的数量;
S5、确保消息消费完成后再提交偏移量Offset;
S6、多服务器的线程设置,通过统计多种数据主题topic的分区数partition,采用下列公式计算:P/n=concurrency,其中P为总的分区数partition的数据,n为服务器的数量,concurrency为线程数。
2.根据权利要求1所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S1中,令Kafka Producer中参数acks=all。
3.根据权利要求1所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S2中,令Kafka Producer中参数retries=5。
4.根据权利要求1所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S3中,令replication.factor≥3。
5.根据权利要求4所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S4中,令min.insync.replicas>1。
6.根据权利要求5所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S5中,所述主题topic的副本数的参数为replication.factor,消息写入副本的数量的参数为min.insync.replicas,确保replication.factor>min.insync.replicas。
7.根据权利要求6所述的一种基于kafka集群的生产与消费的方法,其特征在于:令replication.factor=min.insync.replicas+1。
8.根据权利要求1所述的一种基于kafka集群的生产与消费的方法,其特征在于:所述的步骤S6中,令Kafka Consumer端的参数enbale.auto.commit为false,以保证数据不会重复消费。
CN202010760097.1A 2020-07-31 2020-07-31 一种基于kafka集群的生产与消费的方法 Pending CN111930538A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010760097.1A CN111930538A (zh) 2020-07-31 2020-07-31 一种基于kafka集群的生产与消费的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010760097.1A CN111930538A (zh) 2020-07-31 2020-07-31 一种基于kafka集群的生产与消费的方法

Publications (1)

Publication Number Publication Date
CN111930538A true CN111930538A (zh) 2020-11-13

Family

ID=73315082

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010760097.1A Pending CN111930538A (zh) 2020-07-31 2020-07-31 一种基于kafka集群的生产与消费的方法

Country Status (1)

Country Link
CN (1) CN111930538A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112929430A (zh) * 2021-01-29 2021-06-08 光控特斯联(上海)信息科技有限公司 一种基于物联网通信的数据传输方法及系统
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品
CN115242787A (zh) * 2022-07-22 2022-10-25 恒生电子股份有限公司 消息处理系统及方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112929430A (zh) * 2021-01-29 2021-06-08 光控特斯联(上海)信息科技有限公司 一种基于物联网通信的数据传输方法及系统
CN112929430B (zh) * 2021-01-29 2023-01-03 光控特斯联(上海)信息科技有限公司 一种基于物联网通信的数据传输方法及系统
CN115150471A (zh) * 2022-06-27 2022-10-04 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品
CN115150471B (zh) * 2022-06-27 2024-03-29 北京百度网讯科技有限公司 数据处理方法、装置、设备、存储介质及程序产品
CN115242787A (zh) * 2022-07-22 2022-10-25 恒生电子股份有限公司 消息处理系统及方法
CN115242787B (zh) * 2022-07-22 2023-09-05 恒生电子股份有限公司 消息处理系统及方法

Similar Documents

Publication Publication Date Title
CN111930538A (zh) 一种基于kafka集群的生产与消费的方法
EP1654645B1 (en) Fast application notification in a clustered computing system
CN110648178A (zh) 一种增加kafka消费能力的方法
JP4998549B2 (ja) メモリミラー化制御プログラム、メモリミラー化制御方法およびメモリミラー化制御装置
EP2354875A2 (en) Peer-to-Peer exchange of data resources in a control system
CN114363407B (zh) 消息服务方法及装置、可读存储介质及电子设备
CN110941502B (zh) 消息处理方法、装置、存储介质及设备
CN111897878B (zh) 主辅数据同步方法及系统
EP2643771B1 (en) Real time database system
WO2016065776A1 (zh) 一种紧耦合可扩展的大数据交互方法
CN115599870A (zh) 基于消息队列的存量数据与增量数据融合的数据同步方法
CN112217847A (zh) 微服务平台及其实现方法、电子设备及存储介质
CN109901948B (zh) 无共享数据库集群异地双活容灾系统
CN113282604B (zh) 基于消息队列实现的高可用时序数据库集群系统
CN112804332B (zh) 消息处理系统、方法、装置、设备及计算机可读存储介质
CN113946449A (zh) 一种基于Kafka的消费者端负载均衡方法
CN112527520A (zh) 一种部署消息中间件的方法和装置
CN112148798A (zh) 应用于分布式系统的数据处理方法及装置
CN107026880A (zh) 数据同步方法和装置
WO2024051454A1 (zh) 处理事务日志的方法及装置
CN117290122A (zh) 一种基于Kafka的多环境有序性生产消费的方法
CN110661841B (zh) 微服务架构中分布式服务发现集群的数据一致性方法
CN111526188A (zh) 基于Spark Streaming结合Kafka确保数据零丢失的系统和方法
US20160285969A1 (en) Ordered execution of tasks
CN111400065B (zh) 一种分离全局zookeeper的pulsar消息异地多活方法及系统

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