Kafka生产者与消费者分区策略

一、生产者分区

分区的目的在于可以提高并发,并在可在集群中扩展以适应不同大小的数据
producer发送的数据会被封装成Producer Recorder对象

  1. 在生成Producer Recorder对象时指明partition的情况下,直接进入对应的partition分区
  2. 没有指明partition值,但有key值,将key的hash值与topic的分区数进行取余,进入对应的分区
  3. 没有partition和key值,则随机生成一个整数(后面每次调用在该整数基础上自增),将该整数和topic的分区数取余,进入对应分区

二、消费者分区

消费者分区有两种策略,分别为Range和RoundRobin,默认策略是Range

  1. Range是首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。
    例如:我们有10个分区,两个消费者(C1,C2),3个消费者线程,10 / 3 = 3而且除不尽。
    C1-0 将消费 0, 1, 2, 3 分区
    C2-0 将消费 4, 5, 6 分区
    C2-1 将消费 7, 8, 9 分区
  2. RoundRobin 第一步:将所有主题分区组成TopicAndPartition列表,然后对TopicAndPartition列表按照hashCode进行排序,最后按照轮询的方式发给每一个消费线程,
    例如:我们有10个分区,两个消费者(C1,C2),3个消费者线程
    C1-0 将消费 0, 3, 6, 9 分区
    C2-0 将消费 1, 4, 7 分区
    C2-1 将消费 2, 5, 8 分区
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要创建Kafka生产者,你可以按照以下步骤进行操作: 1. 首先,确保你已经安装了Kafka并启动了Kafka集群。 2. 导入所需的Kafka库,例如在Java中可以使用Apache Kafka的Java客户端库。 3. 设置Kafka生产者的配置参数,包括Kafka集群的地址和端口等。 4. 创建一个KafkaProducer实例,并将配置参数传递给它。 5. 使用producer.send()方法发送消息到指定的主题(topic)。你可以指定一个或多个分区(partition)来发送消息。 下面是一个简单的Java示例代码,演示如何创建一个Kafka生产者并发送消息: ```java import org.apache.kafka.clients.producer.*; import java.util.Properties; public class KafkaProducerExample { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); // Kafka集群的地址和端口 props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); String topic = "your_topic"; String message = "Hello Kafka!"; ProducerRecord<String, String> record = new ProducerRecord<>(topic, message); producer.send(record, new Callback() { public void onCompletion(RecordMetadata metadata, Exception e) { if (e != null) { System.out.println("发送消息失败:" + e.getMessage()); } else { System.out.println("消息发送成功,偏移量为:" + metadata.offset()); } } }); producer.close(); } } ``` 在上面的示例代码中,你需要将`localhost:9092`替换为你的Kafka集群的地
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值