Kafka13-自定义分区器

Kafka13-自定义分区器

1-走自定义分区器发送消息:走 partitionKafkaTemplate:带 key 按 key 的 hash 选分区,不带 key 随机选分区

2-代码仓库:https://gitee.com/enzoism/springboot-kafka-verify -b kafka-noauth

1-自定义分区器

  • 先理解:【自定义分区器】-> 创建的 topic 也有不同的分区,我想按照 Key 分别存放到不同的分区里。
  • 类比分析:有点类似Mysql的分库分表->想让数据按照指定规则分别存放到不同的地方去。
  • 此时和序列化:没有关系,所以我只需要只需要在【生产】的时候指定【存放规则】即可

2-代码实操

  • 1-还是KafkaTemplate<String, String>序列化工具

  • 2-调用KafkaTemplate自带的方法->send(String topic, K key, @Nullable V data)进行存储

复制代码
  @Override
  public ListenableFuture<SendResult<K, V>> send(String topic, K key, @Nullable V data) {
      ProducerRecord<K, V> producerRecord = new ProducerRecord<>(topic, key, data);
      return doSend(producerRecord);
  }
  • 3-业务代码示例
java 复制代码
    @Resource
    private KafkaTemplate<String, String> partitionKafkaTemplate;   
		
		@Operation(summary = "走自定义分区器发送消息", description = "走 partitionKafkaTemplate:带 key 按 key 的 hash 选分区,不带 key 随机选分区")
    @GetMapping("/message/save2")
    public AjaxResult send2(@Parameter(description = "消息内容") @RequestParam String message,
                            @Parameter(description = "消息key(可选)") @RequestParam(required = false) String key) {
        partitionKafkaTemplate.send(KafkaTopicConstants.TEST_TOPIC, key, message).addCallback(this::logSendSuccess,
                ex -> log.error("消息发送失败 topic={}, message={}", KafkaTopicConstants.TEST_TOPIC, message, ex));
        return AjaxResult.success("kafka发送消息成功");
    }

相关推荐
starzy19902 小时前
Kafka请求进门口:Processor是怎么把请求读上来的
分布式·kafka
starzy19901 天前
Kafka网络层第一道门:Acceptor线程是怎么启动的
大数据·kafka
huaweichenai1 天前
spring boot对接kafka实现消息队列处理
spring boot·后端·kafka
你看我名字1 天前
Kafka 架构、消息可靠性与生产运维:从分区模型到故障治理
运维·架构·kafka
starzy19902 天前
Kafka源码深度剖析:消息有异常是如何处理的
大数据·kafka
starzy19902 天前
Kafka写数据入口:消息进了Broker之后交给谁
大数据·kafka
螺蛳粉 螺蛳粉2 天前
CDH第七篇:CDH 集成 Kafka 实战:CSD + Parcel 组合拳,先装 ZooKeeper 是铁律
物联网·zookeeper·kafka·消息队列·parcel·cdh集成·csd
Flynn Liang3 天前
物联网时序数据乱序问题全链路治理:从设备到存储的五层实战(附 Flink/Kafka/IoTDB 配置级代码)
flink·kafka·iot·iotdb·emqx·乱序·时序数据
starzy19904 天前
Kafka响应发送:字节是怎么真正写回客户端的
大数据·kafka