SpringBoot如何接入kafka的例子

一,kafka简介

Kafka是一个分布式流处理平台,最初由LinkedIn公司开发,并基于Scala语言和ZooKeeper进行构建。它已经捐献给Apache基金会,成为开源项目。Kafka的主要特点包括高吞吐量、低延迟、可扩展性、持久性和高性能等。

Kafka的基本原理
Kafka通过将数据流发布到主题(Topic)上,然后订阅该主题的消费者可以实时读取和处理这些数据。每个主题可以有多个生产者和消费者,并且可以进行分区管理以提高性能和可靠性。
核心组件包括生产者(Producer)代理(Broker)消费者(Consumer),其中生产者负责发布消息到指定的主题,消费者则从主题中订阅并消费消息。

Kafka的应用场景
(1)日志收集与分析:这是Kafka最初的设计目标之一,广泛用于各种服务的日志收集和分析。
(2)消息系统:Kafka能够解耦生产者和消费者,缓存消息,从而提高系统的可靠性和可用性。
它常用于不同系统间的数据交流和传递,如订单系统、支付系统和库存系统等。
(3)网站活动追踪:Kafka经常被用来记录Web用户或App用户的活动数据,帮助进行用户行为分析和个性化推荐。
(4)指标监控与报警:Kafka常用于传输监控指标数据,实现系统的实时监控和报警功能。
(5)流处理:结合Spark、Flink等流处理框架,Kafka可以构建复杂的实时数据处理管道,支持大规模数据的实时处理。
(6)事件驱动架构:Kafka支持事件驱动的架构设计,通过将业务逻辑与事件的发生绑定,实现事件驱动的自动化处理
(7)数据变更捕获(CDC) :Kafka可以用于捕获数据库的数据变更,实现数据同步和迁移。

Kafka的优势
(1)高吞吐量:Kafka每秒可以处理几十万条消息,延迟最低只有几毫秒。
(2)低延迟:顺序写入和零拷贝技术使得Kafka的延迟控制在毫秒级。
(3)可扩展性:无需停机即可扩展节点及节点上线。
(4)持久性:数据存储到磁盘上,保障数据的安全性和可靠性。
(5)高性能:Kafka具有非常稳定的性能,即使在TB级的数据量下也能保持高效运行
 

二,kafka的下载和安装

(1)官网下载 https://kafka.apache.org/downloads.html 或者在Linux下使用wget命令下载kafka;

(2)安装kafka,以Linux为例,下载的kafka资源压缩包上传到Linux服务器的某目录kafka下,并解压:
解压到当前目录的kafka下:tar -zxvf kafka_2.12-3.8.0.tgz -C ./kafka
授权当前用户所有权限:sudo chown -R xLoginUser ./kafka

(3)修改配置文件:
在kafka的安装目录下修改配置,常见的配置文件包括server.properties 、zookeeper.properties 等。需要特别注意的是,如果有多台机器部署Kafka集群,每台机器都需要独立修改 broker.id 和 listeners 等参数。

(4)添加环境变量:
将Kafka的bin目录添加到系统的PATH环境变量中,以便在任何地方都能运行Kafka的脚本
export PATH=$PATH:/opt/kafka/bin
source ~/.bashrc

(5)启动ZooKeeper服务:
Kafka依赖于ZooKeeper来管理集群,因此需要先启动ZooKeeper服务。可以在Kafka的
bin目录下运行以下命令启动ZooKeeper:
/opt/kafka/bin/zookeeper-server-start.sh  /opt/kafka/config/zookeeper.properties 

(6)启动Kafka服务:
启动ZooKeeper之后,就可以启动Kafka服务了。在Kafka的bin目录下运行以下命令启动Kafka:
/opt/kafka/bin/kafka-server-start.sh  /opt/kafka/config/server.properties 

(7)测试Kafka是否正常运行:
# 创建生产者
/opt/kafka/bin/kafka-console producer -- topic=your-topic-name -- property的关键值对

# 创建消费者
/opt/kafka/bin/kafka-console consumer -- topic=your-topic-name -- from beginning -- property的关键值对

三,SpringBoot如何接入kafka的例子

Spring Boot 接入 Kafka 的方法主要是通过 Spring Kafka 项目。以下是一个基本的例子
1,添加依赖到你的 pom.xml 文件中

<dependencies>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
    </dependency>
	
	<!-- 上面是 kafka 的依赖,下面是SpringBoot的依赖-->
	<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
		<version>3.2.8</version>
	</dependency>
</dependencies>

2,在 application.properties 或 application.yml 中配置 Kafka 相关属性

# application.properties
spring.kafka.bootstrap-servers=localhost:9092
spring.kafka.consumer.group-id=myGroup
spring.kafka.consumer.auto-offset-reset=earliest
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer

3,创建一个 Kafka 生产者,使用 KafkaTemplate 对象把消息发送到指定的 topic 中:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
 
@Service
public class KafkaProducer {
 
    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
 
    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
    }
}

4,创建一个 Kafka 消费者,使用注解 @KafkaListener 监听指定的 topic 和 groupId :

import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;
 
@Component
public class KafkaConsumer {
 
    @KafkaListener(topics = "myTopic", groupId = "myGroup")
    public void listen(String message) {
        System.out.println("Received message in group myGroup: " + message);
    }
}

5,在主类或配置类上添加 @EnableKafka 注解启用 Kafka:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;
 
@SpringBootApplication
@EnableKafka
public class KafkaApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(KafkaApplication.class, args);
    }
}

这里介绍和演示SpringBoot如何接入kafka的例子,欢迎拍砖讨论...

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个基于Spring BootKafka应用程序的示例代码。这个示例应用程序包含了一个生产者和一个消费者,用于发送和接收Kafka消息。 首先,我们需要添加以下依赖项到我们的pom.xml文件中: ``` <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> </dependency> ``` 接下来,我们需要配置Kafka相关的bean。在这个示例中,我们使用了KafkaAutoConfiguration和KafkaProperties来配置KafkaTemplate和其他Kafka相关的bean。我们还定义了一个名为kafkaListenerContainerFactory的KafkaListenerContainerFactory bean,用于配置消息监听器容器。 ``` @Configuration @EnableKafka public class KafkaConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServers; @Bean public KafkaTemplate<String, String> kafkaTemplate() { return new KafkaTemplate<>(producerFactory()); } @Bean public ProducerFactory<String, String> producerFactory() { Map<String, Object> producerConfigProps = new HashMap<>(); producerConfigProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); producerConfigProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); producerConfigProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory<>(producerConfigProps); } @Bean public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() { ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>(); factory.setConsumerFactory(consumerFactory()); return factory; } @Bean public ConsumerFactory<String, String> consumerFactory() { Map<String, Object> consumerConfigProps = new HashMap<>(); consumerConfigProps.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); consumerConfigProps.put(ConsumerConfig.GROUP_ID_CONFIG, "test-group"); consumerConfigProps.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); consumerConfigProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class); return new DefaultKafkaConsumerFactory<>(consumerConfigProps); } } ``` 接下来,我们可以定义一个生产者类,用于发送Kafka消息。在这个示例中,我们使用了一个Rest API来触发生产者发送消息的操作。 ``` @RestController public class KafkaProducerController { @Autowired private KafkaTemplate<String, String> kafkaTemplate; @PostMapping("/kafka/send") public void sendMessage(@RequestParam String message) { kafkaTemplate.send("test-topic", message); } } ``` 最后,我们可以定义一个消费者类,用于接收Kafka消息。在这个示例中,我们使用了@KafkaListener注解来声明一个消息监听器方法,用于接收Kafka消息。 ``` @Service public class KafkaConsumer { @KafkaListener(topics = "test-topic", groupId = "test-group") public void listen(String message) { System.out.println("Received message: " + message); } } ``` 这就是一个基于Spring BootKafka应用程序的示例代码。我们可以运行这个示例应用程序,并使用Rest API来触发生产者发送消息的操作,然后在控制台上查看消费者接收到的消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值