kafka 代码实现

kafka代码实现过程,第一先拉区依赖
1.依赖

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>   <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.0.1</version>
        </dependency>
    </dependencies>

代码实现

public class Kafkaproducer {

    public static void main(String[] args) {

        //创建properties属性
        Properties properties = new Properties();
        //指定集群姓名
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop01:9092,hadoop02:9092");
        //指定key序列化方式
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        //指定value的序列化方式
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
        //创建kafka生产者对象
        KafkaProducer<String,String> kafkaProducer = new KafkaProducer<String, String>(properties);
        //发送所需数据
        for (int i = 0; i <5 ; i++) {
            kafkaProducer.send(new ProducerRecord<String, String>("first","zhangnan"+i));
        }
        kafkaProducer.close();
    }
}

他有个get方法主要是使它能同步

public class KafkaproducerCallSnc {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //创建properties属性
        Properties properties = new Properties();
        //指定集群姓名
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop01:9092,hadoop02:9092");
        //指定key序列化方式
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        //指定value的序列化方式
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
        //创建kafka生产者对象
        KafkaProducer<String,String> kafkaProducer = new KafkaProducer<String, String>(properties);
        //发送所需数据

        for (int i = 0; i <5 ; i++) {
            kafkaProducer.send(new ProducerRecord<String, String>("first" ,"zhaoliu" + i), new Callback() {
                @Override
                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                    if (e==null){
                        System.out.println(" 主题 "+recordMetadata.topic()+" 分区 "+recordMetadata.partition()+" 偏移量 "+recordMetadata.offset()+" 时间 "+recordMetadata.timestamp() );
                    }else {
                        System.out.println(e);
                    }
                }
            }).get();//get方法表示同步 等数据同步完成后直接加入
        }
        //关闭资源
        kafkaProducer.close();
    }
}

其中可以指定自定义发送的分区 通过实现Partitioner接口来自定义Partition就像这样

public class MyPartition implements Partitioner {

    @Override
    public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        String s = value.toString();
        int partition;
        if (s.contains("wangwu")){
            partition=0;
        }else {
            partition=1;
        }
        return partition;
    }
    @Override
    public void close() {

    }
    @Override
    public void configure(Map<String, ?> configs) {

    }
}

在使用类中定义一下partition分区

public class KafkaproducerCallBack {

    public static void main(String[] args) throws InterruptedException {

        //创建properties属性
        Properties properties = new Properties();
        //指定集群姓名
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop01:9092,hadoop02:9092");
        //指定key序列化方式
        properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
        //指定value的序列化方式
        properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,StringSerializer.class.getName());
        //指定自定义分区
        properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, "com.zantong.producer.MyPartition");
        //创建kafka生产者对象
        KafkaProducer<String,String> kafkaProducer = new KafkaProducer<String, String>(properties);
        //发送所需数据

        for (int i = 0; i <10 ; i++) {
            kafkaProducer.send(new ProducerRecord<String, String>("first", "zhaoliu" + i), new Callback() {
                @Override
                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                    if (e==null){
                        System.out.println(" 主题 "+recordMetadata.topic()+" 分区 "+recordMetadata.partition()+" 偏移量 "+recordMetadata.offset()+" 时间 "+recordMetadata.timestamp() );
                    }else {
                        System.out.println(e);
                    }
                }
            });
           // Thread.sleep(1000);
        }
        //关闭资源
        kafkaProducer.close();
    }
}

刚开始的小demo就这样了把 剩下的之后再发

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 Spring Boot 中连接多个 Kafka 集群可以通过创建多个 KafkaTemplate 实例来实现。以下是示例代码: ```java @Configuration public class KafkaConfig { @Value("${kafka.bootstrap.servers1}") private String kafkaBootstrapServers1; @Value("${kafka.bootstrap.servers2}") private String kafkaBootstrapServers2; @Bean public KafkaTemplate<String, String> kafkaTemplate1() { Map<String, Object> props = new HashMap<>(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers1); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(props)); } @Bean public KafkaTemplate<String, String> kafkaTemplate2() { Map<String, Object> props = new HashMap<>(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaBootstrapServers2); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(props)); } } ``` 在上面的示例中,我们创建了两个 KafkaTemplate 实例,分别连接两个不同的 Kafka 集群。使用时,只需要注入相应的 KafkaTemplate 实例即可。例如: ```java @Autowired private KafkaTemplate<String, String> kafkaTemplate1; @Autowired private KafkaTemplate<String, String> kafkaTemplate2; public void sendMessageToKafka1(String topic, String message) { kafkaTemplate1.send(topic, message); } public void sendMessageToKafka2(String topic, String message) { kafkaTemplate2.send(topic, message); } ``` 在上面的示例中,我们分别定义了两个方法,用于向不同的 Kafka 集群发送消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值