CN112199202A - 一种扩展Kafka消费能力开发方法 - Google Patents
一种扩展Kafka消费能力开发方法 Download PDFInfo
- Publication number
- CN112199202A CN112199202A CN202010972957.8A CN202010972957A CN112199202A CN 112199202 A CN112199202 A CN 112199202A CN 202010972957 A CN202010972957 A CN 202010972957A CN 112199202 A CN112199202 A CN 112199202A
- Authority
- CN
- China
- Prior art keywords
- data
- consumption
- kafka
- threads
- management center
- 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
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
- G06F9/524—Deadlock detection or avoidance
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q40/00—Finance; Insurance; Tax strategies; Processing of corporate or income taxes
- G06Q40/12—Accounting
- G06Q40/123—Tax preparation or submission
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Business, Economics & Management (AREA)
- Physics & Mathematics (AREA)
- Finance (AREA)
- General Physics & Mathematics (AREA)
- Accounting & Taxation (AREA)
- Development Economics (AREA)
- General Engineering & Computer Science (AREA)
- Economics (AREA)
- Marketing (AREA)
- Strategic Management (AREA)
- Technology Law (AREA)
- General Business, Economics & Management (AREA)
- Financial Or Insurance-Related Operations Such As Payment And Settlement (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种扩展Kafka消费能力开发方法,属于财税数据处理领域。在采集端增加拦截器,将从采集端采集的数据中增加发票号码和发票代码组成的新字段,将所述新字段推送到Kafka分区的分布键;在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据,创建并管理消费线程,将数据分配给消费线程,当所有线程中数据正确消费完成时,将偏移量提交给Kafka分区再拉取下一批数据;如果某个线程出现错误,管理中心插件将未消费的数据重新分配给其他线程处理直至本批数据正确消费完成。本发明使有限服务器资源下流式数据处理在消费端增强了消费能力,保证业务系统数据及时、准确,为系统使用人员提供持续数据服务。
Description
技术领域
本发明属于财税数据处理领域,特别是涉及一种扩展Kafka消费能力开发方法。
背景技术
进销项比对系统2012年在税局上线后,进行了多次重要版本升级,升级事项包括使用功能项升级,同时也接入了更多的数据源。先后经过金税三期征管系统、增值税发票管理系统、电子底账系统三次重要升级,数据源也由原来的防伪税控系统扩展至多个数据源,在数据源、数据量上增长迅速。其中发票数据是增长最快的,目前系统每月新增发票数据约3000万,日均新增发票100万份、发票明细250万份,月最后一周为增量高峰期,日均新增发票130万份,发票货物明细350万行。数据分析处理过程时间持续增长,已严重不能满足税局工作需求。在有限的服务器资源下,为解决能够及时准确的为税局工作提供数据服务,引入了流式数据处理技术。流式数据处理技术在数据采集(也就是生产数据端)端很快,基本能够实现发票实时开具实时采集,但在消费端受限于服务器资源、性能及业务数据加工处理复杂度影响,不能实时或准实时的完成数据消费(从生产端拿到数据,经过加工后存储到业务数据库,供后续业务使用),造成了大量数据在缓存中积压,影响到了业务系统及使用人员工作。为此本发明为解决有限服务器资源(4台4核16G内存的PC SERVER服务器)下扩大消费能力,保证业务系统正常使用。
发明内容
本发明的目的是实现一种扩展Kafka消费能力开发方法,以解决消费端受限于服务器资源、性能及业务数据加工处理复杂度影响,不能实时或准实时地完成数据消费,造成了大量数据在缓存中积压,影响到了业务系统及使用人员工作的问题。
本发明通过以下技术方案实现:一种扩展Kafka消费能力开发方法,所述方法包括以下步骤:
步骤一、在采集端增加拦截器,将从采集端采集的数据中增加发票号码和发票代码组成新字段,将所述新字段推送到Kafka分区的分布键;
步骤二、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据,创建并管理消费线程,将数据分配给消费线程,当所有线程中数据正确消费完成时,将偏移量提交给Kafka分区再拉取下一批数据;如果消费线程处理过程中某个线程出现错误,管理中心插件将未消费的数据重新分配给其他线程处理直至本批数据正确消费完成。
进一步的,在步骤一中,具体包括以下步骤:
步骤一一、在采集端增加拦截器;
步骤一二、从采集端采集数据,在采集到的数据中增加发票号码和发票代码组成的新字段;
步骤一三、将所述新字段推送到Kafka分区,作为Kafka分区的分布键。
进一步的,在步骤一一中,所述拦截器为Flume拦截器,用于将发票号码和发票代码组成一个新字段。
进一步的,在步骤二中,具体包括以下步骤:
步骤二一、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据;
步骤二二、消费管理中心创建并管理消费线程,并将所述数据分配给消费线程;
步骤二三、判断所有线程中数据是否正确消费完成,若是,则执行步骤二四;否则,返回步骤二二,将未消费的数据重新分配给其他消费线程处理;
步骤二四、将偏移量提交给Kafka分区后,返回步骤二一,再拉取下一批数据。
本发明的有益效果在于:
(1)使用发票号码和发票代码组合的方式,作为数据分布到不同Kafka分区的Key,保证不同分区中不存在相同的发票,避免造成数据库死锁。
(2)消费管理中心中间件保证同一张发票只能在一个线程中消费,同时保证在所创建的消费线程未完成处理前不能将偏移量提交到Kafka,避免造成数据库死锁。
(3)在多线程同时操作一张表,发生死锁时能从中结束死锁线程,重新分配数据到新线程中处理。
附图说明
图1为本发明的一种扩展Kafka消费能力开发方法的整体流程框图;
图2为本发明的一种扩展Kafka消费能力开发方法的消费管理中心管理流程图;
图3为本发明的一种扩展Kafka消费能力开发方法的消费管理中心详细数据分配图。
具体实施方式
下面将结合本发明实施例中的附图对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参照图1-图3所示,本发明提出了一种扩展Kafka消费能力开发方法,所述方法包括以下步骤:
步骤一、在采集端增加拦截器,将从采集端采集的数据中增加发票号码和发票代码组成新字段,将所述新字段推送到Kafka分区的分布键;保证采集的数据(即便有重复发票)同一张发票能够进入同一分区;
步骤二、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据,创建并管理消费线程,将数据分配给消费线程,当所有线程中数据正确消费完成时,将偏移量提交给Kafka分区再拉取下一批数据;如果消费线程处理过程中某个线程出现错误(或异常退出),管理中心插件将未消费的数据重新分配给其他线程处理直至本批数据正确消费完成。
具体的,本发明使用Flume作为采集器,数据采集源使用数据库JDBC连接获取数据,根据数据时间戳,进行轮询采集;采集到的数据,通过编写的Flume拦截器将发票号码+发票代码组成一个KEY作为数据分区的KEY,分发到Kafka指定主题的不同分区中;其中拦截器,数据字段映射,全部配置在数据库配置中心库中。Flume采集速度较快,从Kafka拉取数据也较快,但拉取的数据经加工存储到MYSQL库中时效率较低,为解决此问题我们研发并改进了Kafka消费端程序。
在步骤一中,具体包括以下步骤:
步骤一一、在采集端增加拦截器;
步骤一二、从采集端采集数据,在采集到的数据中增加发票号码和发票代码组成的新字段;
步骤一三、将所述新字段推送到Kafka分区,作为Kafka分区的分布键。
具体的,Flume本身有让使用者扩展自身功能的接口(我们称之为拦截器),这个接口可以一层一层的向后传递采集的数据,我们利用这个特性实现了接口,每层进行单一数据转换,为了不用自己再写一套控制流程来完成每层只处理单一数据(例如:第一层过滤异常数据(合法性校验);第二层:当日数据量统计(用于校验是否采集丢数据);第三层:数据归一化(统一格式,名称不同的统一名称等);第四层:提取三方(购买方、销售方、开具方);第五层:统一维度。
在步骤一一中,所述拦截器为Flume拦截器,用于将发票号码和发票代码组成一个新字段。
在步骤二中,具体包括以下步骤:
步骤二一、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据;
步骤二二、消费管理中心创建并管理消费线程,并将所述数据分配给消费线程;
步骤二三、判断所有线程中数据是否正确消费完成,若是,则执行步骤二四;否则,返回步骤二二,将未消费的数据重新分配给其他消费线程处理;
步骤二四、将偏移量提交给Kafka分区后,返回步骤二一,再拉取下一批数据。
具体的,偏移量,是数据管道中存在很多数据,第一次从管道中取一定量的数据(假如是1000条),下次再取数据时从上次取数据的位置再向后取一定量的数据(第二次从1001的位置开始),相对管道最开始取数据的位置的差值就是偏移量。
具体的,消费端分为两类,一类是消费管理中心中间件,另一类是业务实现类。
消费管理中心负责创建并初始化管理中心对象、创建Kafka管理者及消费者对象,生成主题对应的消费通道对象(多个),每个消费通道对象初始化并且管理多个消费线程,负责线程生命周期和数据分配任务,指定线程处理哪些数据。
消费管理中心的管理对象会循环拉取Kafka中的消息数据,将拉取到的数据,根据数据任务分配规则器(由调用者,业务端实现),将同类数据发送的多个任务接收者(避免同业务数据并发造成的逻辑错误),任务接收者,将接收到的任务数据,发给“业务数据处理者”(由调用者,业务端实现),业务数据处理者处理数据,并返回结果给任务接收者。
消费管理中心的管理对象,监控各个任务接收者是否完成各自的任务,所有的任务接收者全部完成业务处理后,报告给消费者管理,消费者管理提交偏移量,并且继续循环拉取数据,进行任务的分配工作。
业务端实现者拿到消费数据后,只需要开发具体的业务逻辑,就可以实现高并发、高性能的数据处理工作。
本发明仅涉及消费管理中心中间件。
本发明解决了以下几个问题:
(1)保证采集的同一发票数据进入Kafka同一分区。
(2)从Kafka拉取的数据交由托管线程管理,保证同一发票数据分配给同一线程处理。
(3)数据处理线程多少,托管程序根据数据量自动调节。
(4)保证线程在处理发票过程中出现问题,托管程序将发票回收,交此线程再处理。
(5)Kafka消费API操作,与具体业务代码实现完全分离,程序封装Kafka操作,并实现并行的任务分配、数据分配、线程生成周期监控、线程异常监控。
Claims (4)
1.一种扩展Kafka消费能力开发方法,其特征在于,所述方法包括以下步骤:
步骤一、在采集端增加拦截器,将从采集端采集的数据中增加发票号码和发票代码组成新字段,将所述新字段推送到Kafka分区的分布键;
步骤二、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据,创建并管理消费线程,将数据分配给消费线程,当所有线程中数据正确消费完成时,将偏移量提交给Kafka分区再拉取下一批数据;如果消费线程处理过程中某个线程出现错误,管理中心插件将未消费的数据重新分配给其他线程处理直至本批数据正确消费完成。
2.根据权利要求1所述的一种扩展Kafka消费能力开发方法,其特征在于,在步骤一中,具体包括以下步骤:
步骤一一、在采集端增加拦截器;
Flume本身有让使用者扩展自身功能的接口(我们称之为拦截器),这个接口可以一层一层的向后传递采集的数据,我们利用这个特性实现了接口,每层进行单一数据转换,为了不用自己再写一套控制流程来完成每层只处理单一数据(例如:第一层过滤异常数据(合法性校验);第二层:当日数据量统计(用于校验是否采集丢数据);第三层:数据归一化(统一格式,名称不同的统一名称等);第四层:提取三方(购买方、销售方、开具方);第五层:统一维度。
步骤一二、从采集端采集数据,在采集到的数据中增加发票号码和发票代码组成的新字段;
步骤一三、将所述新字段推送到Kafka分区,作为Kafka分区的分布键。
3.根据权利要求2所述的一种扩展Kafka消费能力开发方法,其特征在于,在步骤一一中,所述拦截器为Flume拦截器,用于将发票号码和发票代码组成一个新字段。
4.根据权利要求1所述的一种扩展Kafka消费能力开发方法,其特征在于,在步骤二中,具体包括以下步骤:
步骤二一、在消费端增加消费管理中心插件,使用消费管理中心管理从Kafka分区拉取的数据;
步骤二二、消费管理中心创建并管理消费线程,并将所述数据分配给消费线程;
步骤二三、判断所有线程中数据是否正确消费完成,若是,则执行步骤二四;否则,返回步骤二二,将未消费的数据重新分配给其他消费线程处理;
步骤二四、将偏移量提交给Kafka分区后,返回步骤二一,再拉取下一批数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010972957.8A CN112199202B (zh) | 2020-09-16 | 2020-09-16 | 一种扩展Kafka消费能力开发方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010972957.8A CN112199202B (zh) | 2020-09-16 | 2020-09-16 | 一种扩展Kafka消费能力开发方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112199202A true CN112199202A (zh) | 2021-01-08 |
CN112199202B CN112199202B (zh) | 2023-04-07 |
Family
ID=74015049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010972957.8A Active CN112199202B (zh) | 2020-09-16 | 2020-09-16 | 一种扩展Kafka消费能力开发方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112199202B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110128A1 (en) * | 2001-12-07 | 2003-06-12 | Pitney Bowes Incorporated | Method and system for importing invoice data into accounting and payment programs |
CN109002484A (zh) * | 2018-06-25 | 2018-12-14 | 北京明朝万达科技股份有限公司 | 一种用于顺序消费数据的方法及系统 |
CN109872443A (zh) * | 2018-12-21 | 2019-06-11 | 航天信息股份有限公司 | 一种基于移动端的发票查验与采集的方法及系统 |
CN110648178A (zh) * | 2019-09-24 | 2020-01-03 | 四川长虹电器股份有限公司 | 一种增加kafka消费能力的方法 |
CN111666205A (zh) * | 2020-04-24 | 2020-09-15 | 杭州传化智能制造科技有限公司 | 一种数据审计的方法、系统、计算机设备和存储介质 |
-
2020
- 2020-09-16 CN CN202010972957.8A patent/CN112199202B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030110128A1 (en) * | 2001-12-07 | 2003-06-12 | Pitney Bowes Incorporated | Method and system for importing invoice data into accounting and payment programs |
CN109002484A (zh) * | 2018-06-25 | 2018-12-14 | 北京明朝万达科技股份有限公司 | 一种用于顺序消费数据的方法及系统 |
CN109872443A (zh) * | 2018-12-21 | 2019-06-11 | 航天信息股份有限公司 | 一种基于移动端的发票查验与采集的方法及系统 |
CN110648178A (zh) * | 2019-09-24 | 2020-01-03 | 四川长虹电器股份有限公司 | 一种增加kafka消费能力的方法 |
CN111666205A (zh) * | 2020-04-24 | 2020-09-15 | 杭州传化智能制造科技有限公司 | 一种数据审计的方法、系统、计算机设备和存储介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112905352A (zh) * | 2021-01-29 | 2021-06-04 | 北京深演智能科技股份有限公司 | 节点死锁处理的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN112199202B (zh) | 2023-04-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111125260A (zh) | 一种基于SQL Server的数据同步方法及系统 | |
CN110647512B (zh) | 一种数据存储和分析方法、装置、设备和可读介质 | |
CN111339073A (zh) | 实时数据处理方法、装置、电子设备及可读存储介质 | |
CN110134648A (zh) | 日志处理方法、装置、设备、系统及计算机可读存储介质 | |
CN111429241A (zh) | 一种账务处理方法和装置 | |
CN106021315A (zh) | 一种应用程序的日志管理方法及系统 | |
CN110147470B (zh) | 一种跨机房数据比对系统及方法 | |
CN106933836A (zh) | 一种基于分表的数据存储方法和系统 | |
CN113076304A (zh) | 一种分布式版本管理方法、装置和系统 | |
Yang et al. | The RADStack: Open source lambda architecture for interactive analytics | |
CN112199202B (zh) | 一种扩展Kafka消费能力开发方法 | |
CN110852559A (zh) | 资源的分配方法和装置、存储介质、电子装置 | |
CN111917814B (zh) | 数据发布、订阅方法、装置、设备、系统及可读存储介质 | |
CN104679493A (zh) | 一种流程化的事件处理机制的改进方法 | |
CN111666344A (zh) | 异构数据同步方法及装置 | |
CN113377777B (zh) | 数据加载方法、设备、计算机程序产品及存储介质 | |
CN109947736B (zh) | 实时计算的方法和系统 | |
CN107678856B (zh) | 一种处理业务实体中增量信息的方法及装置 | |
CN110096339A (zh) | 一种基于系统负载实现的扩缩容配置推荐系统及方法 | |
CN113761052A (zh) | 数据库同步方法和装置 | |
CN111324473A (zh) | 可实现高并发处理交易信息的拍卖交易引擎 | |
EP4209933A1 (en) | Data processing method and apparatus, and electronic device and storage medium | |
Jiang et al. | Scalable video transcoding in public clouds | |
CN108595552A (zh) | 数据立方体发布方法、装置、电子设备和存储介质 | |
CA3138141A1 (en) | Method and apparatus for allocating real-time storm tasks |
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 |