直接上干或,kafka和zookeeper可在官网自行下载。可与你参考这位大兄弟的博客搭建的环境,写的很详细,很清晰。而且实测可行,下载连接,安装包在这个博客中都有:https://blog.csdn.net/zhuimeng_by/article/details/94767897
我的zookeeper版本是3.4.5 ,kafka是2.11-2.2.0,搭建方式都一样,只是kafka版本不一样,创建消费的命令不一样,往底下看有标注
写这个博客主要是自己在springboot中集成kafka和zookeeper的时候,遇见了几个问题,服务器搭建的kafka/zookeeper没问题,但是项目启动就报错。比如报:Connection to node -1 could not be established. Broker may not be available.这种错误,
解决思路:先排查配置文件是否更换ip。
必须关闭防火墙:systemctl stop firewalld.service
在pom.xml中,引入kafka的jar包先不要引入版本信息,以防和服务器环境的版本不一致。
先贴代码:
配置信息:
#============== kafka ===================
# 指定kafka 代理地址,可以多个
spring.kafka.bootstrap-servers=172.16.185.183:9092
#=============== provider =======================
spring.kafka.producer.retries=0
# 每次批量发送消息的数量
spring.kafka.producer.batch-size=16384
spring.kafka.producer.buffer-memory=33554432
# 指定消息key和消息体的编解码方式
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
#=============== consumer =======================
# 指定默认消费者group id
spring.kafka.consumer.group-id=test-consumer-group
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.enable-auto-commit=true
spring.kafka.consumer.auto-commit-interval=100
# 指定消息key和消息体的编解码方式
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
pom.xml引入kafka包
创建一个发送消息的实体:
package com.example.yoyos.bean;
import lombok.Data;
import java.util.Date;
/**
* 发送消息实体
*/
@Data
public class UserBean {
private String names;
private String age;
private String message;
private Date now;
}
.创建主题topic
package com.example.yoyos.work;
import com.example.yoyos.bean.UserBean;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* 主题对象
*/
@Component
public class KfkaTopic {
@Autowired
private KafkaTemplate<String,String> kafkaTemplate;
private Gson gson = new GsonBuilder().create();
public void send(){
UserBean userBean = new UserBean();
userBean.setNames("小张说:");
userBean.setAge("18");
userBean.setMessage("恩,今年18");
userBean.setNow(new Date());
kafkaTemplate.send("pppp", gson.toJson(userBean));
}
}
.创建消息生产
package com.example.yoyos.work;
import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
import java.util.Optional;
/**
* 创建生产消息
*/
@Component
public class KafkaProduce {
@KafkaListener(topics = {"pppp"})
public void listen(ConsumerRecord<?,?> record){
Optional<?> kafkaMessage = Optional.ofNullable(record.value());
if (kafkaMessage.isPresent()){
Object object = kafkaMessage.get();
System.out.println("record "+ record);
System.out.println("object "+ object);
// ./kafka-topics.sh --zookeeper 172.16.185.180:2181 --partitions 1 --replication-factor 1 --create --topic bbb
// ./kafka-console-producer.sh --broker-list 172.16.185.180:9092 --topic bbb
// ./kafka-console-consumer.sh --zookeeper 172.16.185.180:2181 --topic bbb
}
}
}
.直接在maven的测试类中调用
package com.example.yoyos;
import com.example.yoyos.work.KfkaTopic;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class YoyosApplicationTests {
@Autowired
KfkaTopic kfkaTopic;
@Test
void contextLoads() {
kfkaTopic.send();
}
}
运行后,查看监听端窗口是否接受到传输的消息:
如果能接受到,说明环境和代码都ok;
以下需要注意几点的是:
1.服务器防火墙必须关闭
2.引入kafka版本不要写,就是pom.xml中的这一句
version>2.1.11.RELEASE</version>
3.版本不一样的kafka,创建消费者的命令也不一样。
2.10的版本之前的是./kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --topic test
2.11版本之后的是 ./kafka-console-consumer.sh --bootstrap-server 172.16.185.183:9092 --topic pppp --from-beginning
以上是自己刚学习的时候,遇见的雷。希望对刚入手的你有帮助。