Kafka相关消息队列大数据开发

大数据开发:Kafka常见消息发送策略

2021-07-15  本文已影响0人  成都加米谷大数据

Kafka作为实时数据流处理的分布式组件而言,性能是非常值得称赞的,从消息流的引入到传送,遵循相应的消息发送策略,来达到更高效地数据处理。今天的大数据开发学习分享,我们来具体讲讲Kafka常见消息发送策略。

Kafka在发送消息时,可以自主选择分区,消息在发送之前,producer可以知道相关topic的集群信息,从而将消息按照不同的策略发送到不同的分区。

Kafka常见的分区策略有很多种:

1、轮询策略

轮询策略就是按分区顺序依次发送,假设有p1,p2,p3三个分区那么1号分区就会有1,4,7...,2号分区会有2,5,8...,3号分区会有3,6,9...号消息。轮询策略可以最大限度的消息的负载均衡,避免数据倾斜,即每一个分区均匀的处理相同或相近数量的消息。

2、随机策略

随机策略就是在所有分区中随机选择一个,从概率上来说,当消息量足够大,也就是随机的次数足够多的时候,随机策略也是均匀的将消息分散在每一个分区中,但是这只是一个概率均值,假如有n个分区,随机发送100 0000 0000条消息或者可以使每个分区得到100 0000 0000/n条消息,但是如果仅仅发送n条消息,随机策略并不能保证每个分区都有一条,这也是随机和轮询的区别,因此生产上如果想保证消息均匀,最好还是按照轮询策略。

3、按分区权重

按分区权重顾名思义就是给分区分配一定的比重,然后将消息按权重分配在不同的分区。举个简单的例子,假如有p1,p2,p3三个分区,如果希望将消息按照2:1:1的比重分配消息,可以将p1,p2,p3权重设置为2,1,1发送消息时,随机生成一个100以内的数字,如果数字落在1-50,则发送p1,如果落在51-75,则发送给p2,如果落在76-100,则发送给p3,这样就实现在个简单的按权重分配消息,当然这里的这个权重也是统计上的均值,不是绝对的权重。

4、就近原则

所谓就近原则,就是生产者发送消息时,选择距离自己最近的分区,举个例子,假如湖北武汉有一个分区,云南和新疆也各自有一个分区,武汉的生产者如果选择发送到武汉这个分区,就会减少寻址的开销,我们只需要封装一个getLatestPartition的分区调度策略就可以完成这个分区策略。

5、按消息键分区

按消息键分区,就是按照消息中封装的业务字段计算哈希值,然后选择分区。该方法主要解决的是某些业务场景的消息具有依赖关系,因此具有业务依赖关系的消息必须按顺序消费,因此必须保证打入同一分区,因为kafka只能保证同一分区下的消息有序性。

实现此种策略的方法也很简单,核心思想就是hash(key)%cluster.size(),因为相同的key总是具有相同的哈希值,因此在一个确定的集群中可以实现相同的key总是发给同一分区。

kafka是怎么处理分区策略的?

private int partition(ProducerRecord<K,V>record,byte[]serializedKey,byte[]serializedValue,Cluster cluster){

Integer partition=record.partition();

return partition!=null?partition:this.partitioner.partition(record.topic(),record.key(),serializedKey,record.value(),serializedValue,cluster);

}

Kafka Producer的partition方法,如果在消息中已经指定了分区号,就发送到指定分区号,否则根据配置的partition方法选择。Partitioner是一个接口,该接口的partition方法为真正选择分区号的方法,如果想要实现自定义分区策略,只需要创建MyPartition implements Partitioner接口并实现partition方法,并在kafka配置中partitioner.class参数为类路径即可。

关于大数据开发学习,Kafka常见消息发送策略,以上就为大家做了基本的介绍了。Kafka的消息发送策略,可以结合到之前讲过的分区来一起看,更容易理解清楚整个运行流程。

上一篇 下一篇

猜你喜欢

热点阅读