Windows+docker下简单kafka测试联调

环境:

bash 复制代码
1. Windows desktop
2. OpenJDK 17
3. Idea community
4. offset explorer(kafka GUI tool, optional)

一. 简单环境安装

1.安装完Windows desktop后,控制台拉取官方镜像(写时最新为4.1.1)

bash 复制代码
docker pull apache/kafka:4.1.1

拉取成功后通过docker images命令或者docker desktop Images中看到此镜像

2.运行实例,将端口映射到本机9092上:

bash 复制代码
docker run -d --name kafka -p 9092:9092 apche/kafka:4.1.1

使用docker ps或者在docker desktop的containers中查看刚才的实例

3.进入到实例里面, 用docker exec命令或者docker destop直接查看:

bash 复制代码
docker exec -it kafka bash
# or
docker exec -it [your kafka instance id] bash

kafka在/opt/kafka目录下,查看目录结构:

查看版本验证:

bash 复制代码
bin/kafka-topics.sh --version

查看本地已有主题

bash 复制代码
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

手动创建topic

bash 复制代码
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic your-topic-name

删除topic

bash 复制代码
bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic your-topic-name

二.使用Spring Boot/Java程序简单测试Kafka

1.去spring initializer网站上初始化一个Spring Boot项目,添加web+kafka依赖

2.用idea打开并添加如下代码:

application.yarml:

bash 复制代码
spring:
  kafka:
    bootstrap-servers: localhost:9092
    consumer:
      group-id: my-group
      auto-offset-reset: earliest
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

server:
  port: 8080
复制代码
KafkaController.java:
java 复制代码
package com.example.demo.controller;


import com.example.demo.service.KafkaProducer;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/kafka")
public class KafkaController {

    private final KafkaProducer kafkaProducer;

    public KafkaController(KafkaProducer kafkaProducer) {
        this.kafkaProducer = kafkaProducer;
    }

    @PostMapping("/send")
    public String sendMessage(@RequestParam String msg,
                              @RequestParam(defaultValue = "test-topic") String topic) {
        kafkaProducer.sendMessage(topic, msg);
        return "Message sent to topic '" + topic + "': " + msg;
    }
}
复制代码
KafkaConsumer.java:
java 复制代码
package com.example.demo.service;

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

@Service
public class KafkaConsumer {

    @KafkaListener(topics = "test-topic", groupId = "my-group")
    public void listen(ConsumerRecord<String, String> record) {
        System.out.printf("Received message: topic=%s, partition=%d, offset=%d, value=%s%n",
                record.topic(), record.partition(), record.offset(), record.value());
    }
}
复制代码
KafkaProducer.java:
java 复制代码
package com.example.demo.service;

import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;

@Service
public class KafkaProducer {

    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaProducer(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
        System.out.println("Sent message: " + message + " to topic: " + topic);
    }
}

运行DemoApplication的main方法,启动spring boot,控制台最后打印:

相关推荐
明志数科15 小时前
4D时序标注技术详解:让机器人理解连续动作的数据基础
java·算法·机器人
_qingche15 小时前
H2 数据库到 MySQL 数据迁移
java·数据库·spring boot·mysql·spring·重构·kotlin
AOwhisky15 小时前
MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
运维·数据库·笔记·学习·mysql·云计算
Peace15 小时前
【Prometheus】
linux·运维·prometheus
我叫张土豆15 小时前
V100 显卡部署 Qwen3-ASR-1.7B 语音识别模型(vLLM + Docker 完整教程)
docker·语音识别·vllm
真上帝的左手16 小时前
11. 容器化 vs 虚拟化-K8s-工作负载实战
云原生·容器·kubernetes
可乐ea16 小时前
【知识获取与分享社区项目 | 项目日记第 21 天】索引构建与联想建议:Outbox 增量更新 + Completion Suggester
java·大数据·mysql·elasticsearch·搜索引擎
RainCity16 小时前
Java Swing 自定义组件库分享(十一)
java·笔记·后端
好家伙VCC16 小时前
Qdrant + LangChain 实战:构建毫秒级语义检索服务
java·langchain
AI人工智能+电脑小能手16 小时前
【大白话说Java面试题 第93题】【Mysql篇】第23题:从查找速度来看,聚集索引和非聚集索引哪个更快?
java·开发语言·数据库·mysql·面试