目录
一、kafka的docker安装
1、安装zookeeper
2、安装kafka
二、kafka的安装包安装
1、准备安装包
2、文件配置(单机演示模式)
3、启动服务
三、Java程序测试
1、生产者
2、消费者
Windows下 kafka安装及使用_kafka windows安装_尘世猫的博客-CSDN博客
运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper
windows安装kafka - 民工黑猫 - 博客园
docker run -d --name zookeeper \
-p 2181:2181 \
-v /etc/localtime:/etc/localtime \
wurstmeister/zookeeper
docker run -d --name kafka -p 9092:9092 \
-e KAFKA_BROKER_ID=0 \
-e KAFKA_ZOOKEEPER_CONNECT=192.168.1.14:2181 \
-e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.1.14:9092 \
-e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
-t wurstmeister/kafka
参数意义:
#在kafka集群中,每个kafka都有一个BROKER_ID来区分自己
#zookeeper集群的地址,可以是多个,多个之间用逗号分割
#发布到ZooKeeper供客户端使用的监听器
#配置kafka的监听端口,指定hostname为0.0.0.0绑定所有接口
#容器时间同步虚拟机的时间
Apache Kafka下载教程:Apache Kafka下载 - OrcHome
下载官网:https://kafka.apache.org/downloads.html
下载并且解压它
[root@localhost ~]# tar -xzf kafka_2.13-2.8.0.tgz
[root@localhost ~]# cd kafka_2.13-2.8.0
kafka的配置文件在config/server.properties文件中,配置:Socket Server Settings,供外部程序连接
listeners = PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://192.168.1.14:9092
总结:advertised_listeners 是对外暴露的服务端口,真正建立连接用的是 listeners。
- 关于listeners配置
kafka listeners 和 advertised.listeners 的区别及应用_一一可可的博客-CSDN博客
- 其他配置
kafka安装及配置过程 - zhaoshizi - 博客园
注意:你的本地环境必须安装有Java 8+。
运行kafka需要使用Zookeeper,所以你需要先启动Zookeeper,如果你没有Zookeeper,你可以使用kafka自带打包和配置好的Zookeeper。
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
加-daemon参数,可以在后台启动Zookeeper,输出的信息在保存在执行目录的logs/zookeeper.out文件中。
启动kafka服务:
bin/kafka-server-start.sh -daemon config/server.properties
注:
kafka如果直接启动会出现问题,就是信息会打印在控制台,就会出现在控制台。
如果关闭窗口,那么kafka会随之关闭,因此需要加-daemon参数,当然,还有另一种方法,使用nohup也可以实现程序后台运行
nohup bin/zookeeper-server-start.sh config/zookeeper.properties 1>/dev/null 2>&1 &
停止kafka/zookeeper,可以使用kill/killall命令终止进程
java操作kafka非常的简单,然后kafka也提供了很多缺省值,一般情况下我们不需要修改太多的参数就能使用。下面我贴出代码。
pom.xml
org.apache.kafka
kafka-clients
1.0.0
package com.swadian.kafka;
import java.util.Properties;
import java.util.Random;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.common.serialization.StringSerializer;
public class Producer {
public static String topic = "test_topic";//定义主题
public static void main(String[] args) throws InterruptedException {
Properties p = new Properties();
p.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.1.14:9092");//kafka地址,多个地址用逗号分割
p.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
p.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
KafkaProducer kafkaProducer = new KafkaProducer<>(p);
try {
while (true) {
String msg = "Hello," + new Random().nextInt(100);
ProducerRecord record = new ProducerRecord(topic, msg);
kafkaProducer.send(record);
System.out.println("消息发送成功:" + msg);
Thread.sleep(500);
}
} finally {
kafkaProducer.close();
}
}
}
注意:
package com.swadian.kafka;
import java.util.Collections;
import java.util.Properties;
import org.apache.kafka.clients.consumer.ConsumerConfig;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.serialization.StringDeserializer;
public class Consumer {
public static void main(String[] args) {
Properties p = new Properties();
p.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.1.14:9092");
p.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
p.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
p.put(ConsumerConfig.GROUP_ID_CONFIG, "test_topic");
KafkaConsumer kafkaConsumer = new KafkaConsumer(p);
kafkaConsumer.subscribe(Collections.singletonList(Producer.topic));// 订阅消息
while (true) {
ConsumerRecords records = kafkaConsumer.poll(100);
for (ConsumerRecord record : records) {
System.out.println(String.format("topic:%s,offset:%d,消息:%s", //
record.topic(), record.offset(), record.value()));
}
}
}
}
注意: