Kafka快速入门及使用

入门

官网

简介

  • Kafka是一个分布式的流媒体平台
  • 应用:
    • 消息系统
    • 日志收集
    • 用户行为追踪
    • 流式处理

特点

  • 高吞吐量
  • 消息持久化
  • 高可靠性
  • 高扩展性

常用术语

  • Broker:集群中的服务器
  • Zookeeper:服务管理
  • Topic:主题,Kafka发送消息为发布订阅模式,用来存放消息的空间为Topic
  • Partition:分区,对Topic进行分区,可以多线程读写Topic
  • Offset:消息在分区内存放的索引序列
  • Leader Replica:主副本,对数据做备份;提高容错率,响应读取
  • Follower Replica:随从副本,从主副本做备份;主副本出问题时,从 从副本中随机选取一个作为主副本

安装

下载地址:

Kafka不分平台,虽然压缩包格式为tgz,但是解压后,一样可以在Windows运行。

配置

压缩包解压到不含中文的目录下后,在config包中进行配置;

配置Zookeeper.properties

对Zookeeper相关的集群做配置;配置Zookeeper数组存放位置;如下所示:

配置server.properties

主要配置Kafka日志文件存放位置;在配置文件中的第62行如下图所示:

运行kafka

进入config同层级目录的bin目录中,因为是Windows系统,所以进入windows包中,执行命令。

先启动Zookeeper

在初级目录(解压后可以看到bin以及config的目录)下;执行如下命令启动Zookeeper:

shell 复制代码
bin\windows\zookeeper-server-start.bat config\zookeeper.properties

即使用config目录下的zookeeper配置文件,启动zookeeper;启动结果如下:

再启动Kafka

进入kafka_2.13-3.2.3后;执行如下命令启动kafka;

shell 复制代码
bin\windows\kafka-server-start.bat config\server.properties

启动后结果如下:

启动成功

启动成功后可以在之前,在配置文件中,配置的Zookeeper数据目录和Kafka日志保存目录中查看自动创建的文件;如下图所示:

使用Kafka

进入包含命令的Windows命令包目录(kafka_2.13-3.2.3\bin\windows)下

创建主题

因为Kafka作为一个消息队列;采用的是发布订阅模式;需要将消息发布到某个主题下,首先需要创建主题;

主题:

  • 代表一个位置
  • 代表一种消息的类别

使用如下命令创建主题:

shell 复制代码
kafka-topics.bat --create --创建主题的服务器 地址:端口 --创建副本 副本数 --分区 分区数 --topic 主题名

执行成功案例如下图所示:

运行如下命令查看主题:

shell 复制代码
kafka-topics.bat --list --指定主题所在服务器 地址:端口

执行示例如下:

发送消息

主题创建成功后,需要再往主题上发送消息;发送消息是以生产者模式身份发送;执行如下命令:

shell 复制代码
kafka-console-producer.bat --服务器列表 服务器地址:端口 --topic 主题名

执行上述命令后,即可输入需要发布的消息;执行示例如下:

接收消息

在新的命令行窗口,重新进入目录(kafka_2.13-3.2.3\bin\windows)下;以消费者身份接收消息;执行命令如下:

shell 复制代码
kafka-console-consumer.bat --指定服务器 读取消息的服务器地址:端口 --topic 读取消息的主题名 --从头开始读取消息

执行示例如下所示:

Spring整合Kafka

引入依赖

在项目pom文件中引入以下依赖:

xml 复制代码
<!-- https://mvnrepository.com/artifact/org.springframework.kafka/spring-kafka -->
<dependency>
    <groupId>org.springframework.kafka</groupId>
    <artifactId>spring-kafka</artifactId>
</dependency>

配置Kafka

application.properties文件中,进行如下配置:

properties 复制代码
# 配置服务器列表
spring.kafka.bootstrap-servers=localhost:9092
# 消费者分组id   在Kafka的消费者配置文件中有
# 可在配置文件中 更改分组id 更改后需要重新启动kafka
spring.kafka.consumer.group-id=test-consumer-group
# 是否自动提交 消费者的偏移量
spring.kafka.consumer.enable-auto-commit=true
# 自动提交频率 此处配置3000ms
spring.kafka.consumer.auto-commit-interval=3000

访问Kafka

主要是通过生产者发送消息;消费者监听消息,测试在Spring中使用Kafka代码如下:

java 复制代码
/**
 * @author 花木凋零成兰
 * @date 2024/3/23 23:41
 */
@SpringBootTest
@ContextConfiguration(classes = Application.class)		// 使用Application类的配置
public class KafkaTests {

    @Autowired
    private KafkaProducer kafkaProducer;

    @Test
    public void testKafka() {
        // 发送消息
        kafkaProducer.send("test", "你好");
        kafkaProducer.send("test", "在干嘛");

        try {
            Thread.sleep(1000 * 20);    // 阻塞主线程 用户观察消费者是否接收到消息
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }

    }

}

/**
 * 生产者
 */
@Component
class KafkaProducer {

    @Autowired
    private KafkaTemplate kafkaTemplate;

    /**
     * 发送消息方法
     * @param topic 主题
     * @param content 发送消息的内容
     */
    public void send(String topic, String content) {
        kafkaTemplate.send(topic, content);
    }

}

/**
 * 消费者
 */
@Component
class KafkaConsumer {

    /**
     * 监听主题发送的消息
     * @param record    消息自动封装为ConsumerRecord
     */
    @KafkaListener(topics = {"test"})   // 需要监听的主题
    public void handleMessage(ConsumerRecord record) {
        System.out.println(record.value()); // 读取消息
    }

}

运行测试后,成功结果如下所示,可观察到消费者读取到生产者发送的消息

相关推荐
独泪了无痕12 分钟前
MongoTemplate 基础使用帮助手册
spring boot·mongodb
CircleMouse2 小时前
基于 RedisTemplate 的分页缓存设计
java·开发语言·后端·spring·缓存
獨枭3 小时前
使用 163 邮箱实现 Spring Boot 邮箱验证码登录
java·spring boot·后端
维基框架3 小时前
Spring Boot 封装 MinIO 工具
java·spring boot·后端
秋野酱3 小时前
基于javaweb的SpringBoot酒店管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
Q_Q19632884753 小时前
python的家教课程管理系统
开发语言·spring boot·python·django·flask·node.js·php
努力学习的明4 小时前
Spring MVC 对 JavaWeb 的优化:从核心组件到注解
java·spring·mvc·web
秋野酱5 小时前
基于javaweb的SpringBoot驾校预约学习系统设计与实现(源码+文档+部署讲解)
spring boot·后端·学习
北辰浮光5 小时前
[springboot]SSM日期数据转换易见问题
java·spring boot·后端
两点王爷5 小时前
IDEA中springboot项目中连接docker
spring boot·docker·intellij-idea