当前位置: 首页 > article >正文

Kafka 下载安装及使用总结

1. 下载安装

官网下载地址:Apache Kafka

下载对应的文件

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上传到服务器上,解压

tar -xzf kafka_2.13-3.7.0.tgz

目录结果如下

├── bin
│   └── windows
├── config
│   └── kraft
├── libs
├── licenses
└── site-docs

官方文档:Apache Kafka

kafka 有两种启动方式,ZooKeeper 和 KRaft,这里采用 KRaft 的方式,使用 kraft 目录下的配置文件

config
├── connect-console-sink.properties
├── connect-console-source.properties
├── connect-distributed.properties
├── connect-file-sink.properties
├── connect-file-source.properties
├── connect-log4j.properties
├── connect-mirror-maker.properties
├── connect-standalone.properties
├── consumer.properties
├── kraft
│   ├── broker.properties
│   ├── controller.properties
│   └── server.properties
├── log4j.properties
├── producer.properties
├── server.properties
├── tools-log4j.properties
├── trogdor.conf
└── zookeeper.properties

修改 server.properties 文件

  • process.roles:KRaft 模式角色
    • broker
    • controller
    • broker,controller
  • node.id:节点 ID,需要为每个节点分配一个唯一的 ID
  • controller.quorum.voters:Controller 的投票者配置
  • log.dirs:日志目录

初始化集群,先生成一个 UUID

./bin/kafka-storage.sh random-uuid

再执行命令,使用生成的 UUID 完成集群初始化

./bin/kafka-storage.sh format -t thCDFveGRleJro7zTaOOGA -c ./config/kraft/server.properties

然后启动 Kafka

./bin/kafka-server-start.sh -daemon ./config/kraft/server.properties

2. Spring Boot 集成

2.1 引入依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
            <version>3.1.4</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.kafka</groupId>
                    <artifactId>kafka-clients</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-clients</artifactId>
            <version>3.7.0</version>
        </dependency>
</dependencies>

2.2 配置文件

spring:
  kafka:
    bootstrap-servers: 127.0.0.1:9092
    consumer:
      group-id: fable-group

2.3 生产者

使用 KafkaTemplate 实现消息的生产

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProducerController {

    private final KafkaTemplate<String, String> kafkaTemplate;

    @Autowired
    public ProducerController(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    @GetMapping("/send/message")
    public String sendMessage() {
        kafkaTemplate.send("test", "Hello, Kafka!");
        return "Message sent successfully";
    }
}

2.4 消费者

添加 @KafkaListener 注解,监听消息

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Service;

@Service
public class ConsumerService {

    @KafkaListener(topics = "test", groupId = "fable-group")
    public void listen(ConsumerRecord<String, String> consumerRecord) {
        System.out.println("Received message: " + consumerRecord.value());
    }
}

2.5 启动类

添加 @EnableKafka 注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.kafka.annotation.EnableKafka;

@SpringBootApplication
@EnableKafka
public class FableApplication {
    public static void main(String[] args) {
        SpringApplication.run(FableApplication.class, args);
    }
}

2.6 测试

访问 /send/message 接口,可以看到控制台打印出接收到的消息

Received message: Hello, Kafka!

http://www.kler.cn/news/315745.html

相关文章:

  • JavaWeb初阶 day1
  • 从零开始学习Linux(14)---线程池
  • 『功能项目』QFrameWorkBug关联Slot(插槽)【67】
  • C++:使用tinyxml2获取节点下元素
  • android kotlin Extension扩展函数
  • HashMap源码
  • 【bug】通过lora方式微调sdxl inpainting踩坑
  • 用uniapp 及socket.io做一个简单聊天 升级 9
  • 【LeetCode】289.生命游戏
  • 模擬器怎麼多開換IP?
  • 【无人机设计与控制】 基于matlab的蚁群算法优化无人机uav巡检
  • Redis面试真题总结(一)
  • 数据库(选择题)
  • 【最快最简单的排序 —— 桶排序算法】
  • 华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?
  • Java 入门基础篇08 - Java的变量与数据类型的认识
  • 在 Python 中使用 JSON
  • 【Linux取经之路】Linux项目自动化构建工具-make/makefile git三板斧
  • 基于web的工作管理系统设计与实现
  • MacOS升级Ruby版本的完整指南
  • Apache subversion 编译流程
  • Delphi 12.2 新增的 WebStencils 尝鲜
  • Vue.js与Flask/Django后端配合
  • HarmonyOS鸿蒙开发实战(5.0)表情图片聊天案例实践
  • 后端-navicat查找语句(单表与多表)
  • atcoder abc372 启发式合并, dp
  • 感知算法引入时序模型的优势
  • Unity UGUI的核心渲染组件
  • FFmpeg中结构释放小函数
  • Python在数据科学与机器学习中的应用