CN110941497A - 一种数据发送方法及装置 - Google Patents
一种数据发送方法及装置 Download PDFInfo
- Publication number
- CN110941497A CN110941497A CN201811107712.8A CN201811107712A CN110941497A CN 110941497 A CN110941497 A CN 110941497A CN 201811107712 A CN201811107712 A CN 201811107712A CN 110941497 A CN110941497 A CN 110941497A
- Authority
- CN
- China
- Prior art keywords
- partition
- data
- key value
- sent
- key
- 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/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
- 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)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种数据发送方法及装置,该方法包括:获取当前待发送数据;从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括基于预设分区算法确定的M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。通过本发明提供的数据发送方法,可以更为准确的控制各个待发送数据发送至对应的分区中,从而可以控制各分区得到的数据量,提高各分区得到的数据量的确定性。
Description
技术领域
本发明涉及数据处理领域,尤其涉及一种数据发送方法及装置。
背景技术
现有的消息处理系统中,消息服务器可以包括多个用于存储消息的分区,以便于消费者从分区消费消息。具体的,消息生产者可以为每条消息指定键值(也即Key值),消息在被发送到消息服务器时,分区规则可以根据该消息对应的键值(也即Key值)来决定该消息被存储到哪一个分区中。然而,目前消息生产者通常是基于随机函数生成消息对应的键值(也即Key值),从而容易导致各分区得到的数据量不确定。
在现有技术中,针对因基于随机生成的键值分配消息至分区,导致各分区得到的数据量较为不确定的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供一种数据发送方法及装置,以解决因基于随机生成的键值分配消息至分区,导致各分区得到的数据量较为不确定的问题。
为了解决上述技术问题,本发明是这样实现的:
第一方面,本发明实施例提供了一种数据发送方法。该方法包括:
获取当前待发送数据;
从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
第二方面,本发明实施例还提供一种数据发送装置。该数据发送装置包括:
获取模块,用于获取当前待发送数据;
选择模块,用于从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
发送模块,用于根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
第三方面,本发明实施例还提供一种数据发送装置,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现上述的数据发送方法的步骤。
第四方面,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的数据发送方法的步骤。
本发明实施例中,通过获取当前待发送数据;从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括基于预设分区算法确定的M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。由于键值序列中的M个键值经预设分区算法映射后可得到所述消息服务器的L个分区的分区编号,通过从键值序列中选择待发送数据对应的键值,相比于现有技术中随机生成待发送数据对应的键值,可以更为准确的控制各个待发送数据发送至对应的分区中,从而可以控制各分区得到的数据量,提高各分区得到的数据量的确定性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的数据发送方法的流程图;
图2是本发明又一实施例提供的数据发送方法的流程图;
图3是本发明实施例提供的数据发送装置的结构图;
图4是本发明又一实施例提供的数据发送装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于描述,以下对本发明实施例涉及的一些术语进行说明:
Kafka:是一种高吞吐量的分布式发布订阅消息系统。
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为Broker。
生产者(Producer):向Broker发布消息的客户端应用程序,负责发布消息到Kafka服务器(即Broker)。
消费者(Consumer):从消息队列中请求消息的客户端应用程序。
消费组(Consumer Group):每个消费者属于一个特定的消费组,消费组内的所有消费者协调在一起来消费订阅主题(Topics)的所有分区(partition)。
主题(Topic):消息以主题(Topic)为类别记录,Kafka将消息种子(Feed)分门别类,每一类的消息称之为一个主题(Topic)。
分区(Partition):一个主题(Topic)中的消息数据按照多个分区组织,分区是Kafka消息队列组织的最小单位,一个分区可以看作是一个FIFO(First Input FirstOutput,先入先出)的队列。
哈希(Hash)值:用哈希算法将任意长度的二进制值映射为较短的,固定长度的二进制值,这个二进制值成为哈希(hash)值;在计算机领域,哈希值具有非常广泛的应用,比如快速查找和加密。
MurmurHash算法:是一种非加密Hash算法,适用于基于Hash查找的场景。
Kafka分区机制:
Kafka生产者在生产消息的时候,可以为每条消息定指定键值(即Key值),消息在被发送到Kafka服务器(即Broker)时,分区规则会根据键值(即Key值)来决定消息被存储到哪一个分区中,以实现负载均衡和水平扩展。
Kafka的消费者从Kafka服务器中的某个主题的分区来消费数据。Kafka中1个分区中的消息只能被同一消费组的一个消费者消费,当消费者的数量大于分区的数量时,多余消费者将会空闲。
本发明实施例中,以基于Kafka的消息处理系统为例,可以将所有发送到主题(即Topic)的数据(如消息)进行递增编号,例如,1~n,n为消息数量,在分区时可以按照预设分配规则,将数据(如消息)根据编号分配到相应的分区上。例如,预设分配规则可以包括:
分区编号=键值;
键值=消息编号%分区数量-1。
例如,若待发送的消息数量为100,依次编号为1~100,且主题(即Topic)的分区数量为8,则可以根据公式键值=消息编号%分区数量-1,计算各个消息的键值,并按照预设分区算法,也即分区编号=键值,将各个消息发送至对应的分区,也即将1号消息发送到分区0,2号消息发送到分区1,3号消息发送到分区2,…,8号消息发送到分区7,9号消息发送到分区0,10号消息发送到分区1,以此类推,即可实现数据的均匀分配。具体的,各个分区的数据量可以如下所示:
分区0的数据量为13个;
分区1的数据量为13个;
分区2的数据量为13个;
分区3的数据量为13个;
分区4的数据量为12个;
分区5的数据量为12个;
分区6的数据量为12个;
分区7的数据量为12个。
由上可知,在消息数量与分区数量不能整除的情况下,各分区之间的数据量最多也仅相差1。
因此,可以通过获取与各个分区相匹配的固定值(也即键值序列),这些固定值能按预设分区算法均匀分布到各个分区中,在生产者(即Producer)发送数据时,使用这些固定值作为键值(也即Key值)进行数据发送,从而可以达到数据均匀分配的效果。
实际应用中,为了确定上述用来分区的固定值(也即键值序列),可以依照预设分区算法(例如,Kafka的分区算法),逆向生成上述均匀分区逻辑所需要的固定值,详细内容可参见下述实施例的描述。
本发明实施例提供一种数据发送方法。参见图1,图1是本发明实施例提供的数据发送方法的流程图,如图1所示,包括以下步骤:
步骤101、获取当前待发送数据。
本发明实施例中,上述待发送数据可以是指当前待发送给消息服务器的数据。可以理解的是,上述待发送数据的数量可以是一个或至少两个。
步骤102、从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括基于预设分区算法确定的M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号。
本发明实施例中,上述键值序列(也即Key值序列)可以包括M个键值,其中,M=L*N,也即M为L的N倍,L为消息服务器的分区数量,N为正整数。例如,若消息服务器的分区数量为6,则上述键值序列可以包括6个键值,也可以包括12个键值,也可以包括18个键值等。可以理解的是,上述N的值可以根据实际需求进行设置。
上述消息服务器可以是任意的用于消息分发处理的服务器,例如,Kafka服务器、MetaQ服务器等。为了便于理解,本发明实施例以下实施例均以消息服务器为Kafka服务器为例进行说明。
上述键值序列中的M个键值和消息服务器的L个分区的分区编号之间存在映射关系。具体的,上述M个键值经预设分区算法映射后得到L个分区的分区编号,例如,分别将M个键值输入预设分区算法,所得到的输出结果为L个分区的分区编号。
其中,预设分区算法用于基于键值确定消息对应的分区,可以根据实际需求进行合理设置,例如,预设分区算法为将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号,或是预设分区算法为将键值的哈希值与消息服务器的分区数量的求余结果,确定为分区编号,或是预设分区算法为直接将键值作为分区编号等等,本发明实施例对此不做限定。
例如,当上述M个键值包括Key1至Key5,上述L个分区的分区编号包括P1至P5时,Key1经预设分区算法映射后可得到P1,Key2经预设分区算法映射后可得到P2,Key3经预设分区算法映射后可得到P3,Key4经预设分区算法映射后可得到P4,Key5经预设分区算法映射后可得到P5。
当上述M个键值包括Key1至Key10,上述L个分区的分区编号包括P1至P5时,Key1和Key2分别经预设分区算法映射后均可得到P1,Key3和Key4分别经预设分区算法映射后均可得到P2,Key5和Key6分别经预设分区算法映射后均可得到P3,Key7和Key8分别经预设分区算法映射后均可得到P4,Key9和Key10分别经预设分区算法映射后均可得到P5。
实际应用中,可以预先基于预设分区算法确定上述键值序列中的M个键值,并将上述键值序列存储于数据发送端,例如,生产者(Producer),便于在需要发送消息时,从键值序列中选择待发送消息对应的键值。
本发明实施例中,由于M个键值经预设分区算法映射后得到L个分区的分区编号,从而数据发送端可以基于M个键值与L个分区的分区编号之间的映射关系,选择其期望发送的分区的分区编号对应的键值作为待发送消息对应的键值。例如,数据发送端期望将待发送数据发送至分区P1,则可以从键值序列中选择P1对应的键值作为待发送数据对应的键值。
可选的,在待发送数据的数量为至少两个的情况下,可以按照预设分配比例,从键值序列中选择各个待发送数据对应的键值,其中,预设分配比例用于指示L个分区的数据量的分配比例。
可选的,可以基于预设分配比例和待发送数据的数量确定各个分区对应的数据量,并基于各个分区的数据量,从键值序列中为各个待发送数据选择键值。
例如,若100条待发送数据,分区数量为8(也即分区P0至P7),预设分配比例为平均分配,则可以为100条待发送数据中的13条待发送数据选择对应于分区P0的键值,可以为100条待发送数据中的13条待发送数据选择对应于分区P1的键值,可以为100条待发送数据中的13条待发送数据选择对应于分区P2的键值,可以为100条待发送数据中的13条待发送数据选择对应于分区P3的键值,可以为100条待发送数据中的12条待发送数据选择对应于分区P4的键值,可以为100条待发送数据中的12条待发送数据选择对应于分区P5的键值,可以为100条待发送数据中的12条待发送数据选择对应于分区P6的键值,可以为100条待发送数据中的12条待发送数据选择对应于分区P7的键值,使得100条待发送数据可在分区P0至P7之间近似均匀分布。
步骤103、根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
该步骤中,可以将待发送数据对应的键值和待发送数据一起发送给消息服务器,消息服务器可以基于上述预设分区算法,确定待发送数据对应的键值所对应的分区编号,并将待发送数据存储于对应的分区。
例如,数据发送端期望将待发送数据发送至分区P1,则可以从键值序列中选择P1对应的键值作为待发送数据对应的键值Key1,并向消息服务器发送待发送数据和其对应的键值Key1,消息服务器可以基于Key1,将待发送数据存储于分区P1。
本发明实施例提供的数据发送方法,通过获取当前待发送数据;从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括基于预设分区算法确定的M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。由于键值序列中的M个键值经预设分区算法映射后可得到所述消息服务器的L个分区的分区编号,通过从键值序列中选择待发送数据对应的键值,相比于现有技术中随机生成待发送数据对应的键值,可以更为准确的控制各个待发送数据发送至对应的分区中,从而可以控制各分区得到的数据量,提高各分区得到的数据量的确定性。
可选的,所述预设分区算法包括:
将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值作为分区编号。
本发明实施例中,所述预设分区算法可以是将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号。例如,在基于Kafka的消息处理系统中,预设分区算法的实现代码可以表示如下:
DefaultPartitioner.toPositive(Utils.murmur2("Key".getBytes()))%numPartitio ns;
其中,Key为键值,numPartitions分区数量,murmur2()为murmurhash2哈希算法,getBytes()用于将一个字符串转化为一个字节数组。
需要说明的是,在基于Kafka的消息处理系统中,采用上述预设分区算法对消息进行分区,实现较为简便。
可选的,本发明实施例中,上述预设分区算法也可以是将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或是直接将键值作为分区编号。
可选的,上述步骤102之前,也即所述从键值序列中选择所述待发送数据对应的键值之前,所述方法还包括:
重复执行按照所述预设分区算法计算K值对应的分区编号,并将K值加1的步骤,直至计算得到的所有分区编号中包括所述L个分区中每个分区的分区编号;其中,K的初始值为1;
根据计算得到的所有分区编号中,与所述L个分区的分区编号相同的分区编号对应的K值,确定键值序列。
本发明实施例中,可以将从1开始的整数依次作为键值,按照上述预设分区算法计算对应的分区编号,直至所计算得到的分区编号中包括所有分区的分区编号,并可以将对应于不同分区编号的整数作为键值序列的元素。
需要说明的是,在存在至少两个整数对应于同一分区编号的情况下,可以从至少两个整数中任意选择一个整数作为键值序列中的元素,也可以是从至少两个整数中获取数值最小的一个整数作为键值序列中的元素。
实际应用中,通常遍历分区数量(即numPartitions)的10倍个整数,就可以找到经过预设分区算法落到各个分区的整数。因此,本发明实施例也可以按照所述预设分区算法,分别计算1至10*L中的每个整数对应的分区编号,并根据对应于不同分区编号的整数,确定键值序列。
例如,若Kafka的主题(即Topic)的分区数量(即numPartitions)为8个,依次将整数1至80输入如下预设分区算法,可以得到如下计算结果:
DefaultPartitioner.toPositive(Utils.murmur2("K".getBytes()))%numPartitions;
输入值:1,输出结果:7;
输入值:2,输出结果:0;
输入值:3,输出结果:7;
输入值:4,输出结果:1;
输入值:5,输出结果:6;
……
输入值:80,输出结果:1。
从上述计算结果中,从对应于同一分区编号(也即输出结果)的多个整数中,取数值最小的一个作为该分区编号对应的键值(即Key值),从而可以得到如表1所示的分区编号和键值(即Key值)之间的映射关系:
表1
分区编号 | Key值 |
0 | 2 |
1 | 4 |
2 | 20 |
3 | 7 |
4 | 17 |
5 | 16 |
6 | 5 |
7 | 1 |
也即,在分区数量为8的情况下,键值序列为:
2,4,20,7,17,16,5,1。
同样的,若Kafka的主题(即Topic)的分区数量(即numPartitions)为16个,按照上述同样的计算方法,可以得到表2所示的分区编号和键值(即Key值)之间的映射关系:
表2
分区编号 | Key值 |
0 | 11 |
1 | 4 |
2 | 58 |
3 | 7 |
4 | 17 |
5 | 16 |
6 | 5 |
7 | 30 |
8 | 2 |
9 | 57 |
10 | 20 |
11 | 8 |
12 | 21 |
13 | 25 |
14 | 10 |
15 | 1 |
也即,在分区数量为16的情况下,键值序列为:
11,4,58,7,17,16,5,30,2,57,20,8,21,25,10,1。
本发明实施例通过重复执行按照所述预设分区算法计算K值对应的分区编号,并将K值加1的步骤,直至计算得到的所有分区编号中包括所述L个分区中每个分区的分区编号;其中,K的初始值为1;根据计算得到的所有分区编号中,与所述L个分区的分区编号相同的分区编号对应的K值,确定键值序列,可以较为便捷的计算得到L个分区对应的键值序列。
需要说明的是,当预设分区算法为将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号时,确定键值序列的方式可以同预设分区算法为将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号时,确定键值序列的方式,在此不做赘述。
需要说明的是,当预设分区算法为将键值作为分区编号时,可以直接将分区编号作为键值序列中的键值。例如,若分区编号分别为0至7,则键值序列可以为:0,1,2,3,4,5,6,7。
可选的,上述步骤102,也即所述从键值序列中选择所述待发送数据对应的键值,可以包括:
获取所述待发送数据的编号;
将所述待发送数据的编号与M进行求余,得到第一求余结果;
将所述键值序列中的第一目标键值,选择为所述待发送消息对应的键值,其中,所述第一目标键值为索引值为所述第一求余结果对应的键值。
实际应用中,通常会对所有待发送数据进行连续编号,从而可以依据每个待发送数据的编号(即Index)依次发送数据。例如,100条待发送数据,依次编号为0~99。
本发明实施例中,可以分别获取各个待发送数据的编号,并与M进行求余,并将键值序列中索引值为上述求余结果的键值确定为该待发送消息对应的键值。
需要说明的是,上述键值序列可以表示为数组形式,键值序列的索引值也即数组的索引值。例如,键值序列Array=[2,4,20,7,17,16,5,1],则键值key=Array[Index%partitionNums],其中,Index为待发送数据的编号,partitionNums为分区数量。
例如,分区数量为8,键值序列为:[2,4,20,7,17,16,5,1];若待发送数据a1的索引值为1,则待发送数据a1对应的键值为4(也即Array[1]);若待发送数据a20的索引值为20,则待发送数据a20对应的键值为17(也即Array[4])。
本发明实施例通过获取所述待发送数据的编号;将所述待发送数据的编号与M进行求余,得到第一求余结果;将所述键值序列中的第一目标键值,选择为所述待发送消息对应的键值,其中,所述第一目标键值为索引值为所述第一求余结果的键值,可以使得各个分区的数据量较为均匀,且实现较为简便。
可选的,上述步骤102,也即所述从键值序列中选择所述待发送数据对应的键值,可以包括:
将计数器的值与M进行求余,得到第二求余结果,并将所述计数器的值加1,其中,所述计数器的初始值为0;
将所述键值序列中的第二目标键值,选择为所述待发送消息对应的键值,其中,所述第二目标键值为索引值为所述第二求余结果对应的键值。
在该实施方式中,同样的,上述键值序列可以表示为数组形式,键值序列的索引值也即数组的索引值。例如,键值序列Array=[2,4,20,7,17,16,5,1],则键值key=Array[J%partitionNums],其中,J为计数器的值,partitionNums为分区数量。
本发明实施例中,通过设置计数器,控制数据可以较为均匀的分配至各个分区,使得各个分区的数据均衡,且实现较为简便。
以下结合示例对本发明实施例进行说明:
现在有W条的数据需要进行逐条处理,而每条数据的处理耗时大约一致,且每条数据之间都是独立的,没有相互依赖关系;同时采用Kafka技术进行消息分发(采用480个分区),通过消费者(Consumer)线程进行数据的处理。参见图2,该数据发送方法包括如下步骤:
步骤201、获取分区数量。
该步骤中,分区数量也即partitionNums,在主题(即Topic)创建时已经确定。例如,分区数量为480。
步骤202、确定键值序列。
该步骤中,可以采用前述方法确定键值序列,在此不做赘述。例如,在分区数量为480的情况下,对应480个分区的键值序列如下:
215,746,1237,515,68,1612,337,378,2,238,939,112,131,324,359,60,704,73,1137,159,372,141,220,1098,27,426,548,802,231,385,355,475,1637,2572,……,2724,686,397,1042。
步骤203、从W条待发送数据中读取一条数据。
该步骤中,W为正整数,例如,5000000。本发明实施例可以依次从W条待发送数据中读取一条数据,作为当前待发送数据。
步骤204、判断编号是否为W。
该步骤中,上述编号(即Index)可以为待发送数据的下标,也可以是计数器的值。在编号为W时,说明W条待发送数据已经发送完成,可以结束流程,在编号不为W时,可以执行步骤205。
步骤205、计算当前待发送数据对应的键值。
该步骤中,当前待发送数据的键值key=Array[Index%partitionNums]。
例如,当编号为0,则键值key为215,当编号为100,则键值key为455,当编号为479,则键值key为1042。
步骤206、利用上述键值发送当前待发送数据。
例如,可以采用键值对的形式发送当前待发送数据,也即将键值和待发送数据形成一个键值对进行数据发送。
本发明实施例在基于Kafka进行消息分发时,可以灵活控制每个分区获取的消息数量,适用于需要消息均匀分发或者严格按照比例分发的分布式处理场景。
参见图3,图3是本发明实施例提供的数据发送装置的结构图。如图3所示,数据发送装置300包括:获取模块301、选择模块302和发送模块303,其中:
获取模块301,用于获取当前待发送数据;
选择模块302,用于从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
发送模块303,用于根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
可选的,所述预设分区算法包括:
将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值作为分区编号。
可选的,所述装置还包括:
计算模块,用于所述从键值序列中选择所述待发送数据对应的键值之前,重复执行按照所述预设分区算法计算K值对应的分区编号,并将K值加1的步骤,直至计算得到的所有分区编号中包括所述L个分区中每个分区的分区编号;其中,K的初始值为1;
确定模块,用于根据计算得到的所有分区编号中,与所述L个分区的分区编号相同的分区编号对应的K值,确定键值序列。
可选的,所述选择模块具体用于:
获取所述待发送数据的编号;
将所述待发送数据的编号与M进行求余,得到第一求余结果;
将所述键值序列中的第一目标键值,选择为所述待发送消息对应的键值,其中,所述第一目标键值为索引值为所述第一求余结果对应的键值。
可选的,所述选择模块具体用于:
将计数器的值与M进行求余,得到第二求余结果,并将所述计数器的值加1,其中,所述计数器的初始值为0;
将所述键值序列中的第二目标键值,选择为所述待发送消息对应的键值,其中,所述第二目标键值为索引值为所述第二求余结果对应的键值。
可选的,所述消息服务器为Kafka服务器。
本发明实施例提供的数据发送装置300能够实现图1至图2的方法实施例中数据发送装置实现的各个过程,为避免重复,这里不再赘述。
本发明实施例的数据发送装置300,获取模块301,用于获取当前待发送数据;选择模块302,用于从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;发送模块303,用于根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。由于键值序列中的M个键值经预设分区算法映射后可得到所述消息服务器的L个分区的分区编号,通过从键值序列中选择待发送数据对应的键值,相比于现有技术中随机生成待发送数据对应的键值,可以更为准确的控制各个待发送数据发送至对应的分区中,从而可以控制各分区得到的数据量,提高各分区得到的数据量的确定性。
参见图4,图4是本发明又一实施提供的数据发送装置的结构图,如图4所示,数据发送装置400包括:处理器401、存储器402及存储在所述存储器402上并可在所述处理器上运行的计算机程序,数据发送装置400中的各个组件通过总线接口403耦合在一起,所述计算机程序被所述处理器401执行时实现如下步骤:
获取当前待发送数据;
从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
可选的,所述预设分区算法包括:
将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值作为分区编号。
可选的,所述计算机程序被所述处理器401执行时还用于:
所述从键值序列中选择所述待发送数据对应的键值之前,重复执行按照所述预设分区算法计算K值对应的分区编号,并将K值加1的步骤,直至计算得到的所有分区编号中包括所述L个分区中每个分区的分区编号;其中,K的初始值为1;
根据计算得到的所有分区编号中,与所述L个分区的分区编号相同的分区编号对应的K值,确定键值序列。
可选的,所述计算机程序被所述处理器401执行时还用于:
获取所述待发送数据的编号;
将所述待发送数据的编号与M进行求余,得到第一求余结果;
将所述键值序列中的第一目标键值,选择为所述待发送消息对应的键值,其中,所述第一目标键值为索引值为所述第一求余结果对应的键值。
可选的,所述计算机程序被所述处理器401执行时还用于:
将计数器的值与M进行求余,得到第二求余结果,并将所述计数器的值加1,其中,所述计数器的初始值为0;
将所述键值序列中的第二目标键值,选择为所述待发送消息对应的键值,其中,所述第二目标键值为索引值为所述第二求余结果对应的键值。
可选的,所述消息服务器为Kafka服务器。
可选的,本发明实施例还提供一种数据发送装置,包括处理器401,存储器402,存储在存储器402上并可在所述处理器401上运行的计算机程序,该计算机程序被处理器401执行时实现上述数据发送方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。
本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述数据发送方法实施例的各个过程,且能达到相同的技术效果,为避免重复,这里不再赘述。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本发明的保护之内。
Claims (10)
1.一种数据发送方法,其特征在于,包括:
获取当前待发送数据;
从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
2.根据权利要求1所述的方法,其特征在于,所述预设分区算法包括:
将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值的哈希值与消息服务器的分区数量的求余结果,确定为分区编号;或者
将键值作为分区编号。
3.根据权利要求1所述的方法,其特征在于,所述从键值序列中选择所述待发送数据对应的键值之前,所述方法还包括:
重复执行按照所述预设分区算法计算K值对应的分区编号,并将K值加1的步骤,直至计算得到的所有分区编号中包括所述L个分区中每个分区的分区编号;其中,K的初始值为1;
根据计算得到的所有分区编号中,与所述L个分区的分区编号相同的分区编号对应的K值,确定键值序列。
4.根据权利要求1所述的方法,其特征在于,所述从键值序列中选择所述待发送数据对应的键值,包括:
获取所述待发送数据的编号;
将所述待发送数据的编号与M进行求余,得到第一求余结果;
将所述键值序列中的第一目标键值,选择为所述待发送消息对应的键值,其中,所述第一目标键值为索引值为所述第一求余结果对应的键值。
5.根据权利要求1所述的方法,其特征在于,所述从键值序列中选择所述待发送数据对应的键值,包括:
将计数器的值与M进行求余,得到第二求余结果,并将所述计数器的值加1,其中,所述计数器的初始值为0;
将所述键值序列中的第二目标键值,选择为所述待发送消息对应的键值,其中,所述第二目标键值为索引值为所述第二求余结果对应的键值。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述消息服务器为Kafka服务器。
7.一种数据发送装置,其特征在于,包括:
获取模块,用于获取当前待发送数据;
选择模块,用于从键值序列中选择所述待发送数据对应的键值,其中,所述键值序列包括M个键值,M=L*N,L为消息服务器的分区数量,N为正整数,所述M个键值经预设分区算法映射后得到所述消息服务器的L个分区的分区编号;
发送模块,用于根据所述待发送数据对应的键值,将所述待发送数据发送至对应的分区。
8.根据权利要求7所述的装置,其特征在于,所述预设分区算法包括:将键值的字节数的哈希值与消息服务器的分区数量的求余结果,确定为分区编号。
9.一种数据发送装置,其特征在于,包括处理器、存储器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如权利要求1至6中任一项所述的数据发送方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的数据发送方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811107712.8A CN110941497B (zh) | 2018-09-21 | 2018-09-21 | 一种数据发送方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811107712.8A CN110941497B (zh) | 2018-09-21 | 2018-09-21 | 一种数据发送方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110941497A true CN110941497A (zh) | 2020-03-31 |
CN110941497B CN110941497B (zh) | 2022-05-24 |
Family
ID=69904594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811107712.8A Active CN110941497B (zh) | 2018-09-21 | 2018-09-21 | 一种数据发送方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110941497B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461407A (zh) * | 2022-04-13 | 2022-05-10 | 杭州涂鸦信息技术有限公司 | 数据处理方法、装置、分发服务器、系统及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106953901A (zh) * | 2017-03-10 | 2017-07-14 | 重庆邮电大学 | 一种提高消息传递性能的集群通信系统及其方法 |
CN107590210A (zh) * | 2017-08-25 | 2018-01-16 | 咪咕互动娱乐有限公司 | 一种数据处理方法、装置、系统及计算机可读存储介质 |
CN108365971A (zh) * | 2018-01-10 | 2018-08-03 | 深圳市金立通信设备有限公司 | 日志解析方法、设备及计算机可读介质 |
-
2018
- 2018-09-21 CN CN201811107712.8A patent/CN110941497B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106953901A (zh) * | 2017-03-10 | 2017-07-14 | 重庆邮电大学 | 一种提高消息传递性能的集群通信系统及其方法 |
CN107590210A (zh) * | 2017-08-25 | 2018-01-16 | 咪咕互动娱乐有限公司 | 一种数据处理方法、装置、系统及计算机可读存储介质 |
CN108365971A (zh) * | 2018-01-10 | 2018-08-03 | 深圳市金立通信设备有限公司 | 日志解析方法、设备及计算机可读介质 |
Non-Patent Citations (2)
Title |
---|
OO归去来兮OO: ""kafka学习四:开发producer"", 《CSDN》 * |
桃花惜春风: ""Producer指定分区"", 《CSDN》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114461407A (zh) * | 2022-04-13 | 2022-05-10 | 杭州涂鸦信息技术有限公司 | 数据处理方法、装置、分发服务器、系统及存储介质 |
CN114461407B (zh) * | 2022-04-13 | 2022-08-26 | 杭州涂鸦信息技术有限公司 | 数据处理方法、装置、分发服务器、系统及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110941497B (zh) | 2022-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20230036089A1 (en) | Testing systems and methods | |
CN110716796B (zh) | 智能任务调度方法及装置、存储介质、电子设备 | |
CN107404541B (zh) | 一种对等网络传输邻居节点选择的方法及系统 | |
WO2014194642A1 (en) | Systems and methods for matching users | |
US11270227B2 (en) | Method for managing a machine learning model | |
CN110099112B (zh) | 基于点对点网络的数据存储方法、装置、介质及终端设备 | |
US11422994B2 (en) | Adaptive query processor for query systems with limited capabilities | |
CN106775470B (zh) | 一种数据存储的方法及系统 | |
CN106952085B (zh) | 一种数据存储与业务处理的方法及装置 | |
WO2023168856A1 (zh) | 一种关联场景推荐方法、装置、存储介质及电子装置 | |
EP3370166B1 (en) | Method and apparatus for model parameter fusion | |
CN110019205B (zh) | 一种数据存储、还原方法、装置及计算机设备 | |
CN110941497B (zh) | 一种数据发送方法及装置 | |
CN107395708A (zh) | 一种处理下载请求的方法和装置 | |
CN110245014B (zh) | 数据处理方法和装置 | |
CN108810089B (zh) | 一种信息推送方法、装置及存储介质 | |
CN107800744B (zh) | 一种服务请求转发方法、装置及系统 | |
CN110333984B (zh) | 接口异常检测方法、装置、服务器及系统 | |
US10872121B2 (en) | Systems and methods for matching users | |
CN111382200A (zh) | 信息加载方法、装置、服务器及存储介质 | |
BR112013026571B1 (pt) | Sistema e método para diminuir a latência para aplicativos servidos por meio do pré- processamento antecipado e mídia | |
CN111488490A (zh) | 视频聚类方法、装置、服务器及存储介质 | |
CN111435939B (zh) | 用于划分节点的存储空间的方法和装置 | |
CN117439993B (zh) | Redis集群负载均衡方法、装置、设备及存储介质 | |
US11741063B2 (en) | Deleting and inserting rows in fully homomorphically encrypted databases using queues |
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 |