简介
使用背景
由于新下发需求中,要求将信息封装,再以生产者的形式吐到kafka中,去供消费者服务使用,所以学习一下springboot项目整合kafka。
简介
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。
Spring Boot整合Kafka
安装kafka
环境准备:centos7虚拟机
由于kafka依赖于zookeeper,所以在安装kafka之前,需要安装zookeeper。网上随便找一篇参考安装即可。
安装过程:
1.官网下载kafka压缩包文件,我使用的是kafka_2.11-2.4.1.tgz。
2.下载后解压,设置日志目录,并且修改配置文件信息并修改外部访问。
3.启动并查看是否成功运行。
./kafka-server-start.sh /usr/local/kafka/kafka_2.11-2.4.1/config/server.properties
[root@zookeeper ~]# jps
123300 Jps
121821 Kafka
114702 QuorumPeerMain
107262 CommunityEntryPoint
[root@zookeeper ~]#
创建Spring Boot项目并添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
<version>2.5.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
</dependency>
修改配置,添加kafka相关
# kafka
spring.kafka.bootstrap-servers=192.168.1.106:9092
spring.kafka.consumer.group-id=group1
创建producer
提供简单的发送方法,来推送消息。
@Component
public class KafkaProducerConfig {
@Autowired
private KafkaTemplate kafkaTemplate;
private String topic="myKafkaTest";
//发送
public void send(String str){
kafkaTemplate.send(topic,str);
}
}
创建consumer
提供简单的接收方法,来处理消息。
@Component
public class KafkaConsumerConfig {
@KafkaListener(topics = { "myKafkaTest" } )
//接收
public void receive(ConsumerRecord consumerRecord){
Optional<?> kafkaMessage = Optional.ofNullable(consumerRecord.value());
System.out.println("received...." + kafkaMessage);
if (kafkaMessage.isPresent()) {
Object msg = kafkaMessage.get();
System.out.println("received message is :" + msg);
}
}
}
测试验证
因为是简单实现,所以直接添在主类进行消息初始化,在init方法中发送消息。
@SpringBootApplication
public class SpringkafkatestApplication {
@Autowired
private KafkaProducerConfig kafkaProducerConfig;
@PostConstruct
public void init(){
for (int i = 0; i < 10; i++) {
kafkaProducerConfig.send("send message : " + i);
System.out.println("message send success ...." );
}
}
public static void main(String[] args) {
SpringApplication.run(SpringkafkatestApplication.class, args);
}
}
程序启动后,查看控制台输出:
会打印一些关于kafka的配置信息,在所有信息加载后,可以看到消息发送情况。