1、kafaka安装配置
1、Docker安装zookee
kafaka对于zk是强依赖(k3.0之后可以不用zk),保存kafaka相关节点数据
1、下载镜像
docker pull zookeeper:3.4.14
检查镜像是否拉取成功
docker images | grep zookeeper
2、创建容器
docker run -d -name zookeeper -p 2181:2181 zookeeper:3.4.14
2、Docker安装kafaka
1、下载镜像
docker pull wurstmeister/kafaka:2.12-2.3.1
检查kafka是否拉取成功
docker images | grep kafka
2、创建容器
docker run -d --name kafka \
--env KAFKA_ADVERTISED_HOST_NAME=192.168.0.0 \ -----虚拟机地址
--env KAFKA_Z00KEEPER_CONNECT=192.168.0.0:2181 \ -----连接zk
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.0:9092 \ ---对外监听
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092
--env KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" \
--net=host wurstmeister/kafaka:2.12-2.3.1 -----使用宿主机端口和ip(本机)
-p 9092:9092 \ -----与--net=host 只写一个 (外部机)
2、集成SpringBoot
1、导入依赖
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
2、创建配置文件
server:
port: 9999
spring:
application:
name: kafka-demo
kafka:
bootstrap-servers: 192.168.0.0:9092
producer:
retries: 10 #重试次数
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.apache.kafka.common.serialization.StringSerializer
consumer:
group-id: test-kafka-group
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
3、创建controller
@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
@GetMapping("/KafkaDemo")
public String KafkaDemo(){
kafkaTemplate.send("topic-demo","发送的测试信息");
return "ok";
}
4、创建监听类
@KafkaListener(topics = "topic-demo")
public void onMessage(String msg){
if(!StringUtils.isEmpty(msg)){
System.out.println(msg);
}
}
5、kafka传递的是对象
//如果kafka传递对象可以转换成json字符串发送,controller,和监听类修改如下:
@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
@GetMapping("/KafkaDemo")
public String KafkaDemo(User user){
kafkaTemplate.send("topic-demo",JSON.toJSONString(user));
return "ok";
}
@KafkaListener(topics = "topic-demo")
public void onMessage(String msg){
if(!StringUtils.isEmpty(msg)){
User user = JSON.porseObject(msg,User.class);
System.out.println(user);
}
}