kafka入门,生产者自定义分区(六)

1、实现Partitioner接口

package com.longer.producer;import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;import java.util.Map;/*** 实现接口Partitioner* 实现3个方法:partition,close,configure* 编写partition方法,返回分区号*/
public class MyPartitioner implements Partitioner {/** 返回信息对应的分区* @param topic 主题* @param key 消息的 key* @param keyBytes 消息的 key 序列化后的字节数组* @param value 消息的 value* @param valueBytes 消息的 value 序列化后的字节数组* @param cluster 集群元数据可以查看分区信息* @return*/@Overridepublic int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {//获取消息String msgValue = value.toString();//创建partitionint partition;//判断消息求模return Integer.valueOf(msgValue) % 3;}//关闭资源@Overridepublic void close() {}//p配置方法@Overridepublic void configure(Map<String, ?> map) {}
}

2、使用自定义分区器

主要代码properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,"com.longer.producer.MyPartitioner");

package com.longer.producer;import org.apache.kafka.clients.producer.*;
import org.apache.kafka.common.Cluster;
import org.apache.kafka.common.serialization.StringSerializer;import java.util.Map;
import java.util.Properties;public class CustomProducerCallbackPartitions3 {public static void main(String[] args) {//1、创建kafka生产者得配置对象Properties properties=new Properties();//2、给kafka配置对象添加配置信息properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop100:9092");//3、key value 序列化properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());//添加自定义分区器properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG,"com.longer.producer.MyPartitioner");//4、创建kafka生产者对象KafkaProducer<String,String> producer=new KafkaProducer<String, String>(properties);for (int i = 0; i < 5; i++) {//指定数据发送到1号分区,key为空(IDEA中,ctrl+p查看参数)producer.send(new ProducerRecord<>("first",    String.valueOf(i)), new Callback() {@Overridepublic void onCompletion(RecordMetadata metadata, Exception e) {if(e==null){System.out.println(String.format("主题:%s,分区:%s",metadata.topic(),metadata.partition()));return;}e.printStackTrace();}});}//关闭资源producer.close();}
}

效果

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

和Git相关的一些问题

1. Git拉取项目的两种方式以及区别 方式 Http&#xff1a;通过http方式的clone项目&#xff0c;不需要在git上手动绑定ssh&#xff0c;只需要在clone的时候输入账号&#xff0c;密码即可&#xff1b;SSH&#xff1a;通过ssh方式clone项目&#xff0c;需要手动绑定ssh密钥 区别 …

前端安全问题及解决方案

随着互联网的高速发展&#xff0c;信息安全问题已经成为行业最为关注的焦点之一。总的来说安全是很复杂的一个领域&#xff0c;在移动互联网时代&#xff0c;前端人员除了传统的 XSS、CSRF 等安全问题之外&#xff0c;还时常遭遇网络劫持、非法调用 Hybrid API 等新型安全问题。…

new Vue后整个的流程

文章目录 new Vue后整个的流程Vue.js 创建应用程序流程概述使用 new Vue() 创建Vue 实例流程概述 new Vue后整个的流程 new Vue({el: #app,render: h > h(App),data() {return {message: hello vue}} }).$mount(#app)Vue.js 创建应用程序流程概述 在使用 Vue.js 创建一个应…

大佬总结入职阿里,软件测试常见基础题绝不能忘

什么是软件测试&#xff1f; 正向思维&#xff1a;验证程序是否正常运行&#xff0c;以及是否达到了用户预期的需求。 逆向思维&#xff1a;通过执行测试用例发现程序的错误和缺陷。 关键字&#xff1a;正常运行、用户需求、发现错误。 软件测试的目的是什么&#xff1f; 找出软…

windows电脑hbuilderx打包iOS app及上架app store教程

ios应用&#xff0c;无法像安卓应用一样&#xff0c;上传到自己的服务器让互联网用户下载进行安装&#xff0c;所以需要将生成的app上传到app store&#xff0c;然后用户到app store安装app。 由于官网的教程是使用mac电脑生成证书和上架的&#xff0c;但是很多使用hbuilderx打…

笔记本安装双系统ubuntu时踩的坑——戴尔

如果你遇到以下的这些问题&#xff0c;不要直接装了&#xff0c;无解&#xff01;&#xff01;&#xff01; 建议看我另一篇教程&#xff0c;把硬盘取出来在另外的电脑上装好系统再放回去&#xff0c;这样嘎嘎快。 移动硬盘中安装Ubuntu 20.04系统——立省99%的问题_放风筝的…

【产品应用】一体化步进电机在全自动纸张分切机的应用

全自动纸张分切机是现代印刷业中的重要设备之一&#xff0c;它能够将大的纸张切割成相同大小的小纸张&#xff0c;并具有高精度、高速度和高效率等优点。一体化步进电机作为全自动纸张分切机的重要部件&#xff0c;其应用对于提高设备的性能和稳定性具有重要意义。 01.设备简介…

HTML转EXE工具(HTML App Build)永久免费版

HTML转EXE工具&#xff08;HTM2EXE&#xff09;在CSDN上发布时间轴&#xff1a; 序号时间链接12022-08-17HTML转EXE工具&#xff08;HTML App Build&#xff09;初始版22023-02-18HTML转EXE工具&#xff08;HTML App Build&#xff09;最新版32023-06-23&#xff08;实际未发布…

【Linux 驱动篇(一)】字符设备驱动开发

文章目录 一、字符设备驱动简介二、字符设备驱动开发步骤1. 驱动模块的加载和卸载2. 字符设备注册与注销3. 实现设备的具体操作函数3.1 能够对 chrtest 进行打开和关闭操作3.2 对 chrtest 进行读写操作 4. 添加 LICENSE 和作者信息 三、Linux 设备号1. 设备号的组成2. 设备号的…

多媒体库SDL以及实时音视频库WebRTC中的多线程问题实战详解

目录 1、概述 2、开源跨平台多媒体库SDL介绍 3、开源音视频实时通信库WebRTC介绍 4、在国产化Linux桌面系统中遇到的SDL多线程问题 5、在给WebRTC新增外部音频插件库时遇到的多线程问题 6、最后 VC常用功能开发汇总&#xff08;专栏文章列表&#xff0c;欢迎订阅&#xf…

校园wifi网页认证登录入口

很多校园wifi网页认证登录入口是1.1.1.1 连上校园网在浏览器写上http://1.1.1.1就进入了校园网 使 用 说 明 一、帐户余额 < 0.00元时&#xff0c;帐号被禁用&#xff0c;需追加网费。 二、在计算中心机房上机的用户&#xff0c;登录时请选择新建帐号时给您指定的NT域&…

SpringBoot中集成Redis

目标 在原有SpringBoot项目中&#xff0c;集成Redis&#xff0c;并实现Dao层&#xff0c;Service层&#xff0c;Controller层。 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</…