温馨提示×

Linux Kafka如何入门

小樊
37
2026-07-06 10:59:42
栏目: 智能运维

这在大数据和后端开发领域是一个非常经典的问题。Kafka 是目前最流行的分布式消息队列/流处理平台之一。

针对 Linux 环境下的 Kafka 入门,我为你整理了一份从零到一的实战指南。Kafka 是用 Scala/Java 写的,所以无论你用什么语言开发,服务端部署在 Linux 上都是最标准的做法。


第一阶段:环境准备

Kafka 依赖 Java 运行环境。

  1. 安装 JDK (推荐 JDK 8 或 11) 检查是否已安装:

    java -version
    

    如果没有,请安装(以 Ubuntu 为例):

    sudo apt update
    sudo apt install openjdk-11-jdk
    
  2. 下载 KafkaApache Kafka 官网 复制最新版本的链接(选择 Binary 下载)。

    # 进入常用安装目录
    cd /opt
    # 下载 (请替换为最新版本链接)
    sudo wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz
    # 解压
    sudo tar -xzf kafka_2.13-3.6.1.tgz
    # 重命名方便操作
    sudo mv kafka_2.13-3.6.1 kafka
    cd kafka
    

第二阶段:启动服务(核心步骤)

Kafka 的运行依赖于 ZooKeeper(旧版本)或 KRaft(新版本)。为了让你快速入门,这里先使用传统的 ZooKeeper 模式(最通用,资料最多)。

  1. 启动 ZooKeeper Kafka 自带了一个 ZooKeeper 实例,方便测试。

    # 启动 ZooKeeper (后台运行)
    bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
    
  2. 启动 Kafka Server (Broker)

    # 启动 Kafka (后台运行)
    bin/kafka-server-start.sh -daemon config/server.properties
    
  3. 验证服务是否启动

    # 查看进程
    jps
    

    如果看到 QuorumPeerMain (ZooKeeper) 和 Kafka 两个进程,说明启动成功。


第三阶段:基础操作(命令行实战)

这是理解 Kafka 概念(Topic, Producer, Consumer)最快的方式。

1. 创建 Topic (主题)

在 Kafka 中,消息是按 Topic 分类的。

bin/kafka-topics.sh --create --topic test-topic --bootstrap-server localhost:9092 --partitions 1 --replication-factor 1
  • --partitions 1: 设置 1 个分区(入门简单)。
  • --replication-factor 1: 设置 1 个副本(因为是单机,只能设为1)。

2. 查看 Topic 列表

bin/kafka-topics.sh --list --bootstrap-server localhost:9092

3. 发送消息 (Producer)

启动一个控制台生产者,输入消息。

bin/kafka-console-producer.sh --topic test-topic --bootstrap-server localhost:9092

输入几行文字,按回车发送,然后 Ctrl+C 退出。

4. 接收消息 (Consumer)

启动一个控制台消费者,查看刚才发送的消息。

# 从头开始消费
bin/kafka-console-consumer.sh --topic test-topic --from-beginning --bootstrap-server localhost:9092

你会看到刚才发送的消息。保持这个窗口开着,如果在生产者窗口发新消息,这里会实时显示。


第四阶段:核心概念理解

光会敲命令不够,必须理解这几个概念:

  1. Broker: 一台运行 Kafka 的服务器就是一个 Broker。
  2. Topic (主题): 消息的分类。比如“订单数据”是一个 Topic,“日志数据”是另一个 Topic。
  3. Partition (分区):
    • Topic 的物理分片。
    • 作用: 提高并发能力。如果 Topic 有 3 个分区,3 个消费者可以并行消费。
    • 有序性: Kafka 只保证分区内的消息有序,不保证全局有序。
  4. Producer (生产者): 发送消息的程序。
  5. Consumer (消费者): 读取消息的程序。
  6. Consumer Group (消费者组):
    • 重点:这是 Kafka 实现“单播”和“广播”的关键。
    • 同一个 Group 内的消费者,不会重复消费消息(竞争关系)。
    • 不同 Group 的消费者,都会收到消息(广播关系)。

第五阶段:Java 代码入门 (实战)

虽然你在 Linux 上部署,但开发通常是用 Java/Python/Go。这里以 Java 为例(Maven 依赖):

1. 添加依赖 (pom.xml):

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

2. 简单的生产者代码:

import org.apache.kafka.clients.producer.*;
import java.util.Properties;

public class SimpleProducer {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        Producer<String, String> producer = new KafkaProducer<>(props);
        producer.send(new ProducerRecord<>("test-topic", "key1", "Hello Kafka from Java!"));
        producer.close();
    }
}

3. 简单的消费者代码:

import org.apache.kafka.clients.consumer.*;
import java.time.Duration;
import java.util.*;

public class SimpleConsumer {
    public static void main(String[] args) {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", "test-group"); // 必须指定组
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList("test-topic"));

        while (true) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
            for (ConsumerRecord<String, String> record : records) {
                System.out.printf("offset=%d, key=%s, value=%s%n", record.offset(), record.key(), record.value());
            }
        }
    }
}

第六阶段:进阶与排错

  1. 停止服务 先停 Kafka,再停 ZooKeeper。

    bin/kafka-server-stop.sh
    bin/zookeeper-server-stop.sh
    
  2. 配置文件位置

    • config/server.properties: Kafka 主配置(修改端口、日志路径、Broker ID 等)。
    • config/zookeeper.properties: ZooKeeper 配置。
  3. 常见错误

    • java.net.ConnectException: Connection refused: 说明 Kafka 没启动,或者 localhost:9092 写错了。
    • Cannot allocate memory: Kafka 默认启动内存较大。编辑 bin/kafka-server-start.sh,找到 KAFKA_HEAP_OPTS,把 -Xmx1G -Xms1G 改成 -Xmx256M -Xms128M

学习路径建议

  1. 第一周:熟练使用命令行,理解 Topic、Partition、Consumer Group 的区别。
  2. 第二周:写 Java/Python 代码,实现简单的生产者和消费者,尝试处理异常。
  3. 第三周:学习 Kafka 的持久化机制(日志文件)、ISR(副本同步)、ACK 机制(数据可靠性)。
  4. 第四周:学习 Kafka Streams 或 Spring Cloud Stream(如果做微服务)。

推荐资源

  • 官方文档: Kafka Quickstart (最权威)
  • 书籍: 《Kafka权威指南》(Kafka: The Definitive Guide)
  • 视频: B站搜索“尚硅谷 Kafka”或“黑马 Kafka”。

祝你入门顺利!如果有具体的报错,可以把日志贴出来。

0