场景描述:
系统新增数据需要通过Kafka平台进行推送,第三方消费消息
Kafka的单台搭建:
1.服务器端需要安装jdk, kafka 2.6.0(使用Kafka自带zookeeper),JDK配置对应的环境变量,kafka使用默认配置;
2.启动顺序为:zookeeper启动之后 启动Kafka;
关闭顺序为:Kafka关闭之后 关闭zookeeper;
3.后台zookeeper启动:(到Kafka安装目录)
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
4.后台Kafka启动:(到Kafka安装目录)
bin/kafka-server-start.sh -daemon config/server.properties
5.创建topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic name --partitions 1 --replication-factor 1
6.查看该topic的状态
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic name
7.需要测试的话,可以在Kafka上新开连接窗口 创建生产者和消费者
生产者:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic name
消费者:
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic name --from-beginning
生产者代码:
静态初始化生产者
// topic名称
private static final String TOPIC = "OAMessage";
// broker list地址
private static final String Broker_List = "10.31.245.5:9092";
// kafka 生产者
private static KafkaProducer<String, String> producer = null;
// 初始化生产者
static {
Properties configs = initConfig();
producer = new KafkaProducer<String, String>(configs);
}
private static Properties initConfig() {
Properties properties = new Properties();
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, Broker_List);
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
return properties;
}
在具体方法中使用生产者推送消息
new Thread(()-> {
Map<String, Object> map = new HashMap<>();
map.put("key", "addUnit");
map.put("value", accountAdd);
String msg = JSON.toJSONString(map);
ProducerRecord<String, String> record = new ProducerRecord<String, String>(TOPIC, msg);
producer.send(record);
}).start();
kafka连接错误:属于主机名解析错误
报错 Error connecting to node 0 at XXXXXXXXX:9092:
原因分析:不能解析XXXXXXXXX主机名
Kafka连接原理:首先连接 127.0.0.1:9092
再次连接返回的是 host.name = XXXXXXXXX
最后持续连接的是advertised.host.name = XXXXXXXXX
解决办法:添加hosts文件域名解析
hosts文件增加
127.0.0.1 XXXXXXXXX
用cmd ping一下XXXXXXXXX试试 如果可以ping通即可