使用java代码进行远程kafka集群的生产者写消息操作

使用java代码进行远程k

afka集群的生产者写消息(Produce)操作

本文面向的读者是:通过xsehll等工具在远程服务器上操作kafka集群正确,此时想使用java代码操作远程kafka集群的读者。因为其中还是有不少坑,希望可以帮到跟我有相同的困扰的同学。

本人使用的kafka版本为2.8.0,使用版本在kafka2.x的本文均有效。

1、修改kafka配置

配置文件在 你的kafka解压目录下的config/server.properties中

broker.id=1
listeners=PLAINTEXT://ranYanQiang:9092
advertised.listeners=PLAINTEXT://公网ip:9092 #这里为了防止哪位同学来我的服务器上捣乱,就隐藏我的公网ip
log.dirs=/usr/local/kafka-cluster/kafka-1/log
zookeeper.connect=ranYanQiang:2181,ranYanQiang:2182,17ranYanQiang:2183 #我这里搭建的是伪集群,但是真集群与伪集群差别不大,也就是真集群以ip区分服务,伪集群以端口区分服务。

其中除了advertised.listeners之外,都是kafka集群的基本配置,不必多说。这里想强调的是listeners和advertised.listeners,容易看出,前者和后者均配置了ip加端口号,其中前者为内网ip后者为公网ip,kafka集群通过内网ip进行通信,外部程序可以通过公网ip访问远程服务器。

远程linux服务器的的公网ip与内网ip的查看

公网ip:使用ssh连接远程服务器的ip,如果是在你的xshell工具中应该在左下角

内网ip:打开你的 etc/hosts配置文件,可以看到两个ip,一个是localhost,另一个即你的主机名且为内网ip。通常我们不使用127.0.0.0这种形式的ip名,而是使用配置文件的别名。(可以在云服务台进行主机名的更改)

etc/hosts配置文件:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWZ8jvdv-1629374363266)(C:\Users\1\AppData\Roaming\Typora\typora-user-images\image-20210819192430639.png)]

上述配置需要配置你集群中的所有kafka配置文件,并重启kafka集群。通过jps命令发现我们的三台kafka已经重启成功

在这里插入图片描述

配置的坑:

如果将如下配置写成了公网ip,将会导致你的启动kafka后会几秒钟之内kafka服务挂掉(废了我不少时间)。

listeners=PLAINTEXT://ranYanQiang:9092

2、搭建maven并编写java代码

相信大家都是会搭maven项目的,我们这里只搭建一个最简单的maven项目即可,即搭建时不需要引入任何依赖。

(1)在pom文件中映入kafka相关依赖
    <dependencies>
        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
<!--            我的版本为2.13-2.80,前面为scale版本,后面为kafka版本。-->
            <version>2.8.0</version>
        </dependency>
<!--        想要获取kafka的异常信息需要引入slf4j包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-nop</artifactId>
            <version>1.7.2</version>
        </dependency>
    </dependencies>

(2)编写java代码

在java文件夹下新建一个包,在其中编写kafka消费者的java测试代码

该代码来自B站的尚硅谷Kafka教程(kafka框架快速入门),我的kafka就是在这里学习的。

该代码的功能:

连接远程服务器上的kafka集群,并向second主题中写入second-0 到second-9这失调数据

import java.util.Properties;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;

public class CustomProducer {

    public static void main(String[] args) {
        Properties props = new Properties();
        // kafka 集群, broker-list

        props.put("bootstrap.servers", "119.23.53.2:9092");

        //可用ProducerConfig.ACKS_CONFIG 代替 "acks"
        //props.put(ProducerConfig.ACKS_CONFIG, "all");
        props.put("acks", "all");
        // 重试次数
        props.put("retries", 1);
        // 批次大小
        props.put("batch.size", 16384);
        // 等待时间
        props.put("linger.ms", 1);
        // RecordAccumulator 缓冲区大小
        props.put("buffer.memory", 33554432);
        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);
        for (int i = 0; i < 10; i++) {
            producer.send(new ProducerRecord<String, String>("second", "second-" + Integer.toString(i),
                    "second-" + Integer.toString(i)));
        }
        producer.close();
    }

}
(3)运行代码

程序能在短时间结束即为生产者生产消息成功。

(4)远程服务端验证是否produce成功。

进入某一kafka的文件夹中,运行以下消费者命令查看second主题的消息。

bin/kafka-console-consumer.sh --topic second --bootstrap-server ranYanQiang:9093 --from-beginning

结果如下:

在这里插入图片描述

我们发现我们循环写入的 second-0 到 second-9 写入成功!

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值