一、需求
有好多的朋友购买云服务器的时候,有个需求就是希望自己本地的程序能够连接到云服务器上面,来进行程序的联调测试,本次将如何在云服务器上面搭建单机版kafka的过程进行详情的讲解。
二、搭建过程
第一步 创建docker的网络
这一步主要是为了让zookeeper和kakfa在同一个网络中,进行网络通信,如果docker上面已经有网络了,那就可以省略此步骤。
创建名为kafka-net的bridge网络的指令如下:
docker network create kafka-net --driver bridge
执行完成之后可以通过如下命令进行验证:
docker network list | grep kafka-net
出现如下结果,代表网络创建成功:
f4ed1cce7085 kafka-net bridge local
第二步 搭建zookeeper环境
因为搭建kafka环境的时候,需要用到zookeeper进行消息同步,所以,在搭建kafka之前,需要先搭建zookeeper环境,如果已经有了zookeeper环境可以省略此步骤。
执行命令:
docker run -d --name zk --network kafka-net -p 2181:2181 -t zookeeper
第三步 创建kafka环境
以下指令是创建kafka单机公网版的指令:
docker run -d --name kafka -p 9092:9092 --network kafka-net -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=宿主机公网IP:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://宿主机公网IP:9092 -e ZOOKEEPER.CONNECTION.TIMEOUT.MS=60000 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
备注:
0、宿主机公网IP是云服务器的公网IP;
1、KAFKA_ZOOKEEPER_CONNECT宿主机公网IP:2181;
2、KAFKA_ADVERTISED_LISTENERS=PLAINTEXT:/宿主机公网IP:9092;
3、需要在云服务器的网页控制台的防火墙中开放这个IP宿主机公网IP对应的2181和9092端口的访问权限,否则无法访问。
第四步 验证kafka安装是否成功
1、进入容器的指令
docker exec -it kafka /bin/bash
2、kafka的指令在容器中的目录:
/opt/kafka/bin
3、单机方式创建一个主题,主题名称为test
./kafka-topics.sh --create --zookeeper 宿主机公网IP:2181 --replication-factor 1 --partitions 3 --topic test
4、 进入生成者环境生产消息
./kafka-console-producer.sh --broker-list 宿主机公网IP:9092 --topic test
5、通过命令去消费消息
./kafka-console-consumer.sh --zookeeper 宿主机公网IP:2181 --topic test --from-beginning
6、通过Java客户端进行生成消息
1)需要用到的maven依赖:
org.apache.kafka
kafka-clients
2.4.1
2)通过Java调用的核心代码
//kafka服务器的配置信息
private static Properties getKafkaServerPropertiesWithSpecIp(String serverIp) {
Properties props = new Properties();
props.put("bootstrap.servers", serverIp);
props.put("acks", "all");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
return props;
} //生产消息 public static void producerWithSpecIp(String message) {
Properties props = getKafkaServerPropertiesWithSpecIp(" 宿主机公网IP:9092");
// 创建一个生产者对象KafkaProducer
KafkaProducer producer = new KafkaProducer<>(props);
// 调用send发送消息到指定Topic
producer.send(new ProducerRecord<>("test", null, message));
// 关闭生产者
producer.close();
}
三、总结
以上在云服务器上面通过docker搭建公网单机版kafka的详细步骤和一些注意事项,希望对您有所帮助,如果有什么问题或疑问,请在评论区留言,谢谢。