Docker 搭建 Kafka 集群及常见问题解决

阅读时长 9 分钟读完

随着企业的数据量不断增加,急需处理大量数据的实时消息系统。Apache Kafka 作为一种高性能、低延迟的分布式消息系统,能够承载大量的消息并快速处理。然而,部署和管理 Kafka 集群相对繁琐。幸运的是,使用 Docker 可以轻松地搭建 Kafka 集群,本文将介绍如何使用 Docker 搭建 Kafka 集群,并解决 Kafka 集群搭建过程中可能会遇到的常见问题。

1. 在 Docker 上搭建单机 Kafka

在 Docker 中搭建单机 Kafka 很容易。我们可以使用官方 Kafka 镜像,并以挂载主机目录的方式设定配置,以便我们在本地编辑 Kafka 配置文件,方便于自定义各种参数。

-- -------------------- ---- -------
----- -- -------------- -
-- -- -------------- -
-- ---- -- -- ------------------------------------------------------------- -
-- --- ---- -------------------- -
-- -- --------------------

------ --- -- ------ ------------ -
-- --------- -
-- ----------------- -
-- -------------------------------------- -
-- ----------------------------------------------------- -
-- ---------------------------------------- -
-- -------------------------------------------------------------------------------------------- -
------------------

在此单节点方案中,我们使用了两个 Docker 容器,一个 Kafka 容器,一个 ZooKeeper 容器,这是 Kafka 集群的基本组成。如果您需要更多节点,则需要根据需要扩展这些容器。

2. 在 Docker 上搭建 Kafka 集群

现在我们已经在 Docker 中创建了单节点 Kafka 实例。那么我们如何通过 Docker 快速创建 Kafka 集群呢?我们可以使用 Docker Compose。

在本地目录下创建 docker-compose.yml 文件,并复制以下内容:

-- -------------------- ---- -------
-------- ---

---------

  -----
    ------ ----------------------------
    --------------- ----
    ------
      - -----------
    ------------
      ---------- -
      ------------ -----------------------

  -----
    ------ ----------------------------
    --------------- ----
    ------
      - -----------
    ------------
      ---------- -
      ------------ ----------------------- -----------------------

  -----
    ------ ----------------------------
    --------------- ----
    ------
      - -----------
    ------------
      ---------- -
      ------------ ----------------------- ----------------------- -----------------------

  -------
    ------ ------------------------
    --------------- ------
    ------
      - -----------
    ------------
      ---------------- -
      ------------------------ -------------------------------
      --------------------------- -------------------------
      --------------------------------------- -
      --------------------------------- -
      -------------------------- ------
    -----------
      - ----
      - ----
      - ----

  -------
    ------ ------------------------
    --------------- ------
    ------
      - -----------
    ------------
      ---------------- -
      ------------------------ -------------------------------
      --------------------------- -------------------------
      --------------------------------------- -
      --------------------------------- -
      -------------------------- ------
    -----------
      - ----
      - ----
      - ----

  -------
    ------ ------------------------
    --------------- ------
    ------
      - -----------
    ------------
      ---------------- -
      ------------------------ -------------------------------
      --------------------------- -------------------------
      --------------------------------------- -
      --------------------------------- -
      -------------------------- ------
    -----------
      - ----
      - ----
      - ----

我们用到了 wurstmeister/kafka 和 wurstmeister/zookeeper 镜像,它们是 Apache Kafka 和 ZooKeeper 的官方镜像,并且都承载了更小的 Java 映像,可快速启动 Kafka 和 ZooKeeper。上面的 Docker Compose 配置文件比较长,下面我们逐行来解释。

在上面的配置文件中,我们启动了三个 ZooKeeper 节点作为 Kafka 集群的一个关键元素。这些 ZooKeeper 容器使用了对应的 ZooKeeper 映像,并指定了它们的容器 ID,即 zoo1、zoo2 和 zoo3。每个容器都采用不同的映射端口,这是为了避免端口冲突,同时它们的环境变量中定义了集群 ID 和服务器的 IP 地址和端口信息。

我们在启动 Kafka 容器时,也有多项环境变量定义。例如,我们设置了 Kafka broker ID,以及 ZooKeeper 服务器的连接字符串。Kafka 运行时还会向外部公开一个列表,这个列表由 Docker 网络中的其他容器访问。具体来说,由于我们将 Kafka 服务容器名称映射到 Kafka 服务器 IP 地址,而这些 IP 地址均指向 Docker 内部网关,因此我们将 advertised.listeners 设置为Docker 网络中其他 Kafka 服务器的容器名称和端口号。

此外,我们还需要在启动 Kafka 容器之前启动所有的 ZooKeeper 容器。这是因为在 Kafka 2.0.0 之前,如果没有 ZooKeeper 集群,Kafka 是无法启动的。但是,在 Kafka 2.0.0 中,我们可以使用新的配置选项来为 Kafka 启动独立的运行时实例,即无需 ZooKeeper。

现在只需使用以下命令启动 Kafka 集群:

3. 常见问题解决

3.1 进入 Kafka 容器无法修改 configuration

修改 Kafka 容器的 Configuration 是最常见的操作之一,但是 Kafka 容器中的 configuration 文件无法修改。这是因为 Kafka 容器中的配置文件是 Apache Kafka 镜像定义的 VOLUME 数据卷,并没有映射到主机上。

解决方案是只需在容器启动时指定该配置文件即可:

3.2 集群中 leader 选举失败

Kafka 集群在启动时,会根据指定的 zookeeper 集群信息进行 leader 选举。但是在指定的 zookeeper 集群过少时,Kafka 就会因为无法选举出 leader 而启动失败。

解决方案是增加 zookeeper 集群数量。Kafka 集群中多个 zookeeper 节点之间会相互通信并选取 leader,这样就能保证集群可以顺利启动,并减少失误,进行就绪状态。

4. 结论

本文介绍了如何使用 Docker Compose 快速和容易地搭建 Kafka 集群,在应用、数据存储和扩展方面,通过创建单节点容器和使用 Docker Compose 构建容器组合,得到了解决方案。在生产中,这种基础架构是运行实时大数据应用程序的理想环境。对于我们中的许多开发人员,这是了解如何使用 Docker Compose 构建 Kafka 集群是非常重要的知识。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6705ff13d91dce0dc85695b5

纠错
反馈