docker run -d --name kafka \
 -p 9092:9092 -p 9093:9093 \
 -e TZ=Asia/Shanghai \
 -e LANG=C.UTF-8 \
 -e KAFKA_NODE_ID=1 \
 -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
 -e CLUSTER_ID=kafka-cluster \
 -e KAFKA_PROCESS_ROLES=broker,controller \
 -e KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT \
 -e KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
 -e KAFKA_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
 -e KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
  bitnami/kafka:latest

确保本机(windows或linux) 安装了docker

直接执行以上命令即可使用最新的 KRaft 模式启动最新版本kafka到本机, 无需依赖zookeeper (如果是windows且不适用wsl的话  powershell或者cmd会识别空格和换行导致执行失败  自行删除换行即可)

这也是官方以后推荐的做法, 本身一个中间件强依赖另一个中间件就是一件很不符合直觉的事情


部署完成后可进行个人学习和练习  下面提供spring boot的缺省配置和生产/消费demo效果图

<!--        mavel引入kafka依赖-->
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
spring:
#配置kafka链接
  kafka:
    bootstrap-servers: localhost:9092
package com.fb.controller;

import cn.hutool.core.util.IdUtil;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/kafka")
public class KafKaTest {

    @Resource
    private KafkaTemplate<String, String> kafkaTemplate;


    @GetMapping(value = "/send",produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public void send() {
        String s = IdUtil.fastSimpleUUID();
        log.info("发送kafka消息:{}", s);
        kafkaTemplate.send("test-topic",s);
    }

    @KafkaListener(topics = "test-topic",groupId = "test-group1")
    public void consume1(String message) {
        log.info("收到kafka消息1:{}",message);
    }
    @KafkaListener(topics = "test-topic",groupId = "test-group2")
    public void consume2(String message) {
        log.info("收到kafka消息2:{}",message);
    }
    @KafkaListener(topics = "test-topic",groupId = "test-group3")
    public void consume3(String message) {
        log.info("收到kafka消息3:{}",message);
    }

}
11:30:03.234  INFO 46496 - [http-nio-9999-exec-1] com.fb.controller.KafKaTest              : 发送kafka消息:dfc79987f33a49ca92db2cf75d9203a0
11:30:03.243  INFO 46496 - [http-nio-9999-exec-1] o.a.k.clients.producer.ProducerConfig    : ProducerConfig values: 
	acks = -1
	auto.include.jmx.reporter = true
	batch.size = 16384
	bootstrap.servers = [localhost:9092]
	buffer.memory = 33554432
	client.dns.lookup = use_all_dns_ips
	client.id = fateBeauty-producer-1
	compression.type = none
	connections.max.idle.ms = 540000
	delivery.timeout.ms = 120000
	enable.idempotence = true
	enable.metrics.push = true
	interceptor.classes = []
	key.serializer = class org.apache.kafka.common.serialization.StringSerializer
	linger.ms = 0
	max.block.ms = 60000
	max.in.flight.requests.per.connection = 5
	max.request.size = 1048576
	metadata.max.age.ms = 300000
	metadata.max.idle.ms = 300000
	metric.reporters = []
	metrics.num.samples = 2
	metrics.recording.level = INFO
	metrics.sample.window.ms = 30000
	partitioner.adaptive.partitioning.enable = true
	partitioner.availability.timeout.ms = 0
	partitioner.class = null
	partitioner.ignore.keys = false
	receive.buffer.bytes = 32768
	reconnect.backoff.max.ms = 1000
	reconnect.backoff.ms = 50
	request.timeout.ms = 30000
	retries = 2147483647
	retry.backoff.max.ms = 1000
	retry.backoff.ms = 100
	sasl.client.callback.handler.class = null
	sasl.jaas.config = null
	sasl.kerberos.kinit.cmd = /usr/bin/kinit
	sasl.kerberos.min.time.before.relogin = 60000
	sasl.kerberos.service.name = null
	sasl.kerberos.ticket.renew.jitter = 0.05
	sasl.kerberos.ticket.renew.window.factor = 0.8
	sasl.login.callback.handler.class = null
	sasl.login.class = null
	sasl.login.connect.timeout.ms = null
	sasl.login.read.timeout.ms = null
	sasl.login.refresh.buffer.seconds = 300
	sasl.login.refresh.min.period.seconds = 60
	sasl.login.refresh.window.factor = 0.8
	sasl.login.refresh.window.jitter = 0.05
	sasl.login.retry.backoff.max.ms = 10000
	sasl.login.retry.backoff.ms = 100
	sasl.mechanism = GSSAPI
	sasl.oauthbearer.clock.skew.seconds = 30
	sasl.oauthbearer.expected.audience = null
	sasl.oauthbearer.expected.issuer = null
	sasl.oauthbearer.jwks.endpoint.refresh.ms = 3600000
	sasl.oauthbearer.jwks.endpoint.retry.backoff.max.ms = 10000
	sasl.oauthbearer.jwks.endpoint.retry.backoff.ms = 100
	sasl.oauthbearer.jwks.endpoint.url = null
	sasl.oauthbearer.scope.claim.name = scope
	sasl.oauthbearer.sub.claim.name = sub
	sasl.oauthbearer.token.endpoint.url = null
	security.protocol = PLAINTEXT
	security.providers = null
	send.buffer.bytes = 131072
	socket.connection.setup.timeout.max.ms = 30000
	socket.connection.setup.timeout.ms = 10000
	ssl.cipher.suites = null
	ssl.enabled.protocols = [TLSv1.2, TLSv1.3]
	ssl.endpoint.identification.algorithm = https
	ssl.engine.factory.class = null
	ssl.key.password = null
	ssl.keymanager.algorithm = SunX509
	ssl.keystore.certificate.chain = null
	ssl.keystore.key = null
	ssl.keystore.location = null
	ssl.keystore.password = null
	ssl.keystore.type = JKS
	ssl.protocol = TLSv1.3
	ssl.provider = null
	ssl.secure.random.implementation = null
	ssl.trustmanager.algorithm = PKIX
	ssl.truststore.certificates = null
	ssl.truststore.location = null
	ssl.truststore.password = null
	ssl.truststore.type = JKS
	transaction.timeout.ms = 60000
	transactional.id = null
	value.serializer = class org.apache.kafka.common.serialization.StringSerializer

11:30:03.244  INFO 46496 - [http-nio-9999-exec-1] o.a.k.c.t.i.KafkaMetricsCollector        : initializing Kafka metrics collector
11:30:03.254  INFO 46496 - [http-nio-9999-exec-1] o.a.k.clients.producer.KafkaProducer     : [Producer clientId=fateBeauty-producer-1] Instantiated an idempotent producer.
11:30:03.264  INFO 46496 - [http-nio-9999-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka version: 3.7.0
11:30:03.265  INFO 46496 - [http-nio-9999-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka commitId: 2ae524ed625438c5
11:30:03.265  INFO 46496 - [http-nio-9999-exec-1] o.a.kafka.common.utils.AppInfoParser     : Kafka startTimeMs: 1740108603264
11:30:03.271  INFO 46496 - [ateBeauty-producer-1] org.apache.kafka.clients.Metadata        : [Producer clientId=fateBeauty-producer-1] Cluster ID: Je4q077YRoyIi6441UgTbQ
11:30:03.271  INFO 46496 - [ateBeauty-producer-1] o.a.k.c.p.internals.TransactionManager   : [Producer clientId=fateBeauty-producer-1] ProducerId set to 1008 with epoch 0
11:30:03.313  INFO 46496 - [intContainer#4-0-C-1] com.fb.controller.UserController         : 收到kafka消息3:dfc79987f33a49ca92db2cf75d9203a0
11:30:03.313  INFO 46496 - [intContainer#2-0-C-1] com.fb.controller.KafKaTest              : 收到kafka消息1:dfc79987f33a49ca92db2cf75d9203a0
11:30:03.313  INFO 46496 - [intContainer#3-0-C-1] com.fb.controller.UserController         : 收到kafka消息2:dfc79987f33a49ca92db2cf75d9203a0

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐