CN111931105A - 一种kafka消费指定推送时间数据处理方法 - Google Patents
一种kafka消费指定推送时间数据处理方法 Download PDFInfo
- Publication number
- CN111931105A CN111931105A CN202010699710.3A CN202010699710A CN111931105A CN 111931105 A CN111931105 A CN 111931105A CN 202010699710 A CN202010699710 A CN 202010699710A CN 111931105 A CN111931105 A CN 111931105A
- Authority
- CN
- China
- Prior art keywords
- time
- kafka
- consumption
- message
- offset
- 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
- 238000003672 processing method Methods 0.000 title claims abstract description 16
- 238000005192 partition Methods 0.000 claims abstract description 42
- 238000000034 method Methods 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims abstract description 22
- 230000009191 jumping Effects 0.000 claims abstract description 4
- 238000012856 packing Methods 0.000 claims description 3
- 230000009286 beneficial effect Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- 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/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/541—Client-server
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种kafka消费指定推送时间数据处理方法,涉及数据处理技术领域;该数据处理方法包括以下的步骤:S1、获取指定消费时间的偏移量,包括找到kafka的时间戳的步骤,以及通过kafka的时间戳获取指定消费时间的偏移量的步骤;S2、对kafka进行设置指定偏移量;通过调用kafka Api中的Kafka Consumer,采用seek方法跳到指定Partition的指定Offset处消费;S3、启动kafka消费程序,使设置的时间与消费数据对应的时间戳一致;本发明的有益效果是:该方法减少对重复数据的处理,保证数据质量,减缓因带宽占用过大而影响同网段的其他消费应用的处理能力。
Description
技术领域
本发明涉及消息处理技术领域,更具体的说,本发明涉及一种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集群出现一般性问题时,仍可保障数据质量。但在重启Kafka消费端应用程序时,默认的两种消费机制均存在其弊端:(1)从头消费,导致重复消费数据过多,当消费量巨大,消费时间有限时,对流量带宽占用和消费速度依赖过大。(2)从最新数据消费,导致数据可能有缺失,影响最终数据质量。
发明内容
为了克服现有技术的不足,本发明提供一种kafka消费指定推送时间数据处理方法,该方法减少对重复数据的处理,保证数据质量,减缓因带宽占用过大而影响同网段的其他消费应用的处理能力。
本发明解决其技术问题所采用的技术方案是:一种kafka消费指定推送时间数据处理方法,其特征在于:
S1、获取指定消费时间的偏移量,包括找到kafka的时间戳的步骤,以及通过kafka的时间戳获取指定消费时间的偏移量的步骤;
S2、对kafka进行设置指定偏移量;通过调用kafka Api中的Kafka Consumer,采用seek方法跳到指定Partition的指定Offset处消费;
S3、启动kafka消费程序,使设置的时间与消费数据对应的时间戳一致。
进一步的,所述的步骤S1中,kafka内部处理时间戳的步骤如下:
S11、producer写入消息的时间戳,发送至leader broker;
S12、时间戳按类型分为LogAppend Time和Create Time,其中LogAppend Time 表示producer创建消息的时间,Create Time是leader broker将消息写入到log 的时间;
S13、若时间戳为LogAppend Time,则判定该消息是否压缩,如为压缩消息,则将多条消息打包形成一个内层,外层时间戳为这批打包消息的统一时间戳,使用当前时间覆盖外层消息时间戳,若为未压缩消息,则每条消息独立,则使用当前时间覆盖每条消息的时间戳,此后便进入步骤S14;
若时间戳为Create Time,判定消息产生与接收时间差小于设定的阀值,写入消息,此后便进入步骤S14;
S14、将时间戳写入Active log segment。
进一步的,所述的步骤S1中,通过kafka的时间戳获取指定消费时间的偏移量包括以下的步骤:
S15、将文件名及文件的最后时间放入一个map中;
S16、当用户指定一个时间t0时,在map中找到最后一个早于t0的时间t1,返回这个文件名,即这个文件的第一个offset;
S17、返回所有分区的offset,对所有的分区采取步骤S15-S16。
进一步的,所述时间使用的是13位的unix时间戳。
进一步的,所述的步骤S2中,在调用seek方法的时,需要先获得分区的信息, 分区的信息要通过poll方法来获得;
如果调用seek方法时,没有分区信息,则会抛出异常。
进一步的,通过poll方法获取偏移量的步骤如下:
S21、通过poll方法获得分区数据;
S22、获取所有分区指定时间对应偏移量;
S23、设置分区offset;
S24、判断是否还有未设置的分区,若有则返回至步骤S23,若无则进行下一步;
S25、提交偏移量。
本发明的有益效果是:其一、本发明的此种方法可以减少对重复数据的处理,数据处理速度不容易成为瓶颈;其二、不容易出现数据缺失,保障数据质量;其三、去除不必要的重复数据处理,减缓因带宽占用过大而影响同网段的其他消费应用的处理能力。
附图说明
图1为本发明的一种kafka消费指定推送时间数据处理方法的流程示意图。
图2为本发明的一种kafka消费指定推送时间数据处理方法的kafka内部处理时间戳的步骤示意图。
图3为本发明的一种kafka消费指定推送时间数据处理方法的通过poll方法获取偏移量的步骤示意图。
图4、图5为本发明中设置的时间及消费数据对应的时间戳的一实施例图。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整地描述,以充分地理解本发明的目的、特征和效果。显然,所描述的实施例只是本发明的一部分实施例,而不是全部实施例,基于本发明的实施例,本领域的技术人员在不付出创造性劳动的前提下所获得的其他实施例,均属于本发明保护的范围。另外,专利中涉及到的所有联接/连接关系,并非单指构件直接相接,而是指可根据具体实施情况,通过添加或减少联接辅件,来组成更优的联接结构。本发明创造中的各个技术特征,在不互相矛盾冲突的前提下可以交互组合。
参照图1所示,本发明揭示了一种kafka消费指定推送时间数据处理方法,通过该方法,能够避免数据从头消费和从最新数据消费的弊端,能够对指定时间的消息进行消费,具体的,在本实施例中,该数据处理方法包括以下的步骤:
S1、获取指定消费时间的偏移量,包括找到kafka的时间戳的步骤,以及通过kafka的时间戳获取指定消费时间的偏移量的步骤;
我们对kafka内部处理时间戳以及获取偏移量的步骤进行详细的说明,结合图 2所示,所述的步骤S1中,kafka内部处理时间戳的步骤如下,包括步骤S11-S14:
S11、producer写入消息的时间戳,发送至leader broker;
S12、时间戳按类型分为LogAppend Time和Create Time,其中LogAppend Time 表示producer创建消息的时间,Create Time是leader broker将消息写入到log 的时间;
S13、若时间戳为LogAppend Time,则判定该消息是否压缩,如为压缩消息,则将多条消息打包形成一个内层,外层时间戳为这批打包消息的统一时间戳,使用当前时间覆盖外层消息时间戳,若为未压缩消息,则每条消息独立,则使用当前时间覆盖每条消息的时间戳,此后便进入步骤S14;
若时间戳为Create Time,判定消息产生与接收时间差小于设定的阀值,写入消息,此后便进入步骤S14;
S14、将时间戳写入Active log segment。
Leader/follower可以从Active log segment读取时间戳,同时构建索引文件Index file。
其中,若时间戳为Create Time,需要判定消息产生与接收时间差,此处所指的阈值,可以对该阈值进行定义,例如当消息产生与接收时间差大于3min时,该消息则可以不选择被创建,则直接拒绝写入,直接丢弃该消息;
基于此,可以看到kafka在把数据写入文件的时候会同时保持当前时间戳,故可通过时间戳找到对应的偏移量。通过kafka的时间戳获取指定消费时间的偏移量包括步骤S15-S17:
S15、将文件名及文件的最后时间放入一个map中;所述时间使用的是13位的 unix时间戳;
S16、当用户指定一个时间t0时,在map中找到最后一个早于t0的时间t1,返回这个文件名,即这个文件的第一个offset;
S17、返回所有分区的offset,对所有的分区采取步骤S15-S16。
进一步的,结合图2所示,所述的步骤S2内容如下:
S2、对kafka进行设置指定偏移量;通过调用kafka Api中的Kafka Consumer,采用seek方法跳到指定Partition的指定Offset处消费;
所述的步骤S2中,在调用seek方法的时,需要先获得分区的信息,分区的信息要通过poll方法来获得;如果调用seek方法时,没有分区信息,则会抛出异常。结合图3所示,通过poll方法获取偏移量的步骤如下:
S21、通过poll方法获得分区数据;
S22、获取所有分区指定时间对应偏移量;
S23、设置分区offset;
S24、判断是否还有未设置的分区,若有则返回至步骤S23,若无则进行下一步;
S25、提交偏移量。
S3、启动kafka消费程序,使设置的时间与消费数据对应的时间戳一致。结合图4、图5所示,为设置的时间及消费数据对应的时间戳的一实施例,可以看到设置的时间与消费的时间是一致的。
通过本发明的上述方法,相对于现有技术中在重启Kafka消费端应用程序时,默认的两种消费机制,其至少具有以下的优点:其一、本发明的此种方法可以减少对重复数据的处理,数据处理速度不容易成为瓶颈;其二、不容易出现数据缺失,保障数据质量;其三、去除不必要的重复数据处理,减缓因带宽占用过大而影响同网段的其他消费应用的处理能力。
以上是对本发明的较佳实施进行了具体说明,但本发明创造并不限于所述实施例,熟悉本领域的技术人员在不违背本发明精神的前提下还可做出种种的等同变形或替换,这些等同的变形或替换均包含在本申请权利要求所限定的范围内。
Claims (6)
1.一种kafka消费指定推送时间数据处理方法,其特征在于:
S1、获取指定消费时间的偏移量,包括找到kafka的时间戳的步骤,以及通过kafka的时间戳获取指定消费时间的偏移量的步骤;
S2、对kafka进行设置指定偏移量;通过调用kafka Api中的Kafka Consumer,采用seek方法跳到指定Partition的指定Offset处消费;
S3、启动kafka消费程序,使设置的时间与消费数据对应的时间戳一致。
2.根据权利要求1所述的一种kafka消费指定推送时间数据处理方法,其特征在于:所述的步骤S1中,kafka内部处理时间戳的步骤如下:
S11、producer写入消息的时间戳,发送至leader broker;
S12、时间戳按类型分为LogAppend Time和Create Time,其中LogAppend Time表示producer创建消息的时间,Create Time是leader broker将消息写入到log的时间;
S13、若时间戳为LogAppend Time,则判定该消息是否压缩,如为压缩消息,则将多条消息打包形成一个内层,外层时间戳为这批打包消息的统一时间戳,使用当前时间覆盖外层消息时间戳,若为未压缩消息,则每条消息独立,则使用当前时间覆盖每条消息的时间戳,此后便进入步骤S14;
若时间戳为Create Time,判定消息产生与接收时间差小于设定的阀值,写入消息,此后便进入步骤S14;
S14、将时间戳写入Active log segment。
3.根据权利要求1或2所述的一种kafka消费指定推送时间数据处理方法,其特征在于:所述的步骤S1中,通过kafka的时间戳获取指定消费时间的偏移量包括以下的步骤:
S15、将文件名及文件的最后时间放入一个map中;
S16、当用户指定一个时间t0时,在map中找到最后一个早于t0的时间t1,返回这个文件名,即这个文件的第一个offset;
S17、返回所有分区的offset,对所有的分区采取步骤S15-S16。
4.根据权利要求5所述的一种kafka消费指定推送时间数据处理方法,其特征在于:所述时间使用的是13位的unix时间戳。
5.根据权利要求1所述的一种kafka消费指定推送时间数据处理方法,其特征在于:所述的步骤S2中,在调用seek方法的时,需要先获得分区的信息,分区的信息要通过poll方法来获得;
如果调用seek方法时,没有分区信息,则会抛出异常。
6.根据权利要求5所述的一种kafka消费指定推送时间数据处理方法,其特征在于:通过poll方法获取偏移量的步骤如下:
S21、通过poll方法获得分区数据;
S22、获取所有分区指定时间对应偏移量;
S23、设置分区offset;
S24、判断是否还有未设置的分区,若有则返回至步骤S23,若无则进行下一步;
S25、提交偏移量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010699710.3A CN111931105A (zh) | 2020-07-20 | 2020-07-20 | 一种kafka消费指定推送时间数据处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010699710.3A CN111931105A (zh) | 2020-07-20 | 2020-07-20 | 一种kafka消费指定推送时间数据处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111931105A true CN111931105A (zh) | 2020-11-13 |
Family
ID=73313843
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010699710.3A Pending CN111931105A (zh) | 2020-07-20 | 2020-07-20 | 一种kafka消费指定推送时间数据处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111931105A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN116866427A (zh) * | 2023-09-04 | 2023-10-10 | 杭州比智科技有限公司 | 一种异构消息统一推送方法及系统 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250496A (zh) * | 2016-08-02 | 2016-12-21 | 北京集奥聚合科技有限公司 | 一种日志文件中的数据收集的方法及系统 |
CN108595483A (zh) * | 2018-03-13 | 2018-09-28 | 腾讯科技(深圳)有限公司 | 数据处理方法及相关装置 |
CN109002484A (zh) * | 2018-06-25 | 2018-12-14 | 北京明朝万达科技股份有限公司 | 一种用于顺序消费数据的方法及系统 |
CN109582470A (zh) * | 2017-09-28 | 2019-04-05 | 北京国双科技有限公司 | 一种数据处理方法及数据处理装置 |
CN110648178A (zh) * | 2019-09-24 | 2020-01-03 | 四川长虹电器股份有限公司 | 一种增加kafka消费能力的方法 |
CN111163118A (zh) * | 2018-11-07 | 2020-05-15 | 株式会社日立制作所 | 一种Kafka集群中的消息传输方法及装置 |
KR20200053286A (ko) * | 2018-11-08 | 2020-05-18 | 충북대학교 산학협력단 | 다중 kafka를 이용한 실시간 데이터 전송 시스템 및 방법 |
CN111324310A (zh) * | 2020-02-26 | 2020-06-23 | 中国邮政储蓄银行股份有限公司 | 一种数据的读取方法、装置及计算机系统 |
-
2020
- 2020-07-20 CN CN202010699710.3A patent/CN111931105A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106250496A (zh) * | 2016-08-02 | 2016-12-21 | 北京集奥聚合科技有限公司 | 一种日志文件中的数据收集的方法及系统 |
CN109582470A (zh) * | 2017-09-28 | 2019-04-05 | 北京国双科技有限公司 | 一种数据处理方法及数据处理装置 |
CN108595483A (zh) * | 2018-03-13 | 2018-09-28 | 腾讯科技(深圳)有限公司 | 数据处理方法及相关装置 |
CN109002484A (zh) * | 2018-06-25 | 2018-12-14 | 北京明朝万达科技股份有限公司 | 一种用于顺序消费数据的方法及系统 |
CN111163118A (zh) * | 2018-11-07 | 2020-05-15 | 株式会社日立制作所 | 一种Kafka集群中的消息传输方法及装置 |
KR20200053286A (ko) * | 2018-11-08 | 2020-05-18 | 충북대학교 산학협력단 | 다중 kafka를 이용한 실시간 데이터 전송 시스템 및 방법 |
CN110648178A (zh) * | 2019-09-24 | 2020-01-03 | 四川长虹电器股份有限公司 | 一种增加kafka消费能力的方法 |
CN111324310A (zh) * | 2020-02-26 | 2020-06-23 | 中国邮政储蓄银行股份有限公司 | 一种数据的读取方法、装置及计算机系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113297309A (zh) * | 2021-05-31 | 2021-08-24 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN113297309B (zh) * | 2021-05-31 | 2023-11-10 | 平安证券股份有限公司 | 流数据写入方法、装置、设备及存储介质 |
CN116866427A (zh) * | 2023-09-04 | 2023-10-10 | 杭州比智科技有限公司 | 一种异构消息统一推送方法及系统 |
CN116866427B (zh) * | 2023-09-04 | 2023-12-12 | 杭州比智科技有限公司 | 一种异构消息统一推送方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112507029B (zh) | 数据处理系统及数据实时处理方法 | |
CN110648178A (zh) | 一种增加kafka消费能力的方法 | |
CN105095364A (zh) | 一种数据同步系统和方法 | |
CN110413650B (zh) | 一种业务数据的处理方法、装置、设备和存储介质 | |
WO2021129477A1 (zh) | 一种数据同步的方法及相关设备 | |
CN111931105A (zh) | 一种kafka消费指定推送时间数据处理方法 | |
CN112612799B (zh) | 一种数据同步方法及终端 | |
CN111881116A (zh) | 数据迁移方法、数据迁移系统、计算机系统和存储介质 | |
US10601915B2 (en) | Data stream processor with both in memory and persisted messaging | |
CN111930538A (zh) | 一种基于kafka集群的生产与消费的方法 | |
CN115033646B (zh) | 一种基于Flink&Doris构建实时数仓系统的方法 | |
CN111163172B (zh) | 消息处理系统、方法、电子设备及存储介质 | |
CN115587118A (zh) | 任务数据的维表关联处理方法及装置、电子设备 | |
CN115292414A (zh) | 一种业务数据同步到数仓的方法 | |
CN111460038A (zh) | 一种数据准实时同步方法及装置 | |
CN114579532A (zh) | 处理预写日志的方法、装置及系统 | |
CN113704267A (zh) | 基于ElasticSearch的数据查询方法、系统、设备及存储介质 | |
CN113448757B (zh) | 消息处理方法、装置、设备、存储介质和系统 | |
CN116701352A (zh) | 一种数据库数据迁移方法及系统 | |
CN116302605A (zh) | 一种基于消息引擎的消息传输方法 | |
CN115495265A (zh) | 一种基于hadoop提高kafka消费能力的方法 | |
CN115623071A (zh) | 单机多客户端的发布订阅消息分发方法及系统 | |
CN115098451A (zh) | 一种基于文件的数据传输方法 | |
CN113051091A (zh) | 一种进程级缓存数据同步方法和装置 | |
CN113568966A (zh) | 用于ods层和dw层之间的数据处理方法与系统 |
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 |