文章目录
  1. 1. Kafka docker 的安装和设置
    1. 1.1. bitnami/kafka
      1. 1.1.1. Standalone
      2. 1.1.2. Cluster
  2. 2. Kafka 使用的常见方法
  3. 3. Kafka 的常见类库
    1. 3.1. Python
    2. 3.2. Java
  4. 4. 参考

Kafka docker 的安装和设置

首先说下为什么会选择使用 docker (docker-compose) 的方式安装和使用 kafka, 其实就是希望使用方便,免去一大堆繁杂的配置,而且 docker/docker-compose 以及 k8s 的部署方式也是目前云原生环境下事实标准。

下面就是可选的镜像选择:

前者在配置项方面留出了足够多的灵活度,而后者则支持 docker-compose up --scale 的动态伸缩特性,在下面的例子中我使用前者作为示例,示范如何安装和配置 kafka

bitnami/kafka

在安装kafka之前需要的前置条件是已安装了 docker-compose 如果你使用的是 docker desktop for mac 的话,这部分在安装客户端的时候就已经搞定,可以直接进入下一环节。

获取 docker-compose 配置文件,这里下载配置文件有两种选择:

  1. 单独下载配置文件
  2. Clone Github 工程

建议可以考虑 Clone 工程。

在获取了 docker-compose 配置文件后可以在配置文件所在的项目根目录下运行这组已经定义好的 docker-compose 容器应用。

事实上在目前的状态下,有两种选择,一个是使用只有一个 broker 节点的 standalone 模式的配置 docker-compose.yml ,另一个是使用有三个 broker 节点的 cluster 模式

Standalone

  • 下载镜像文件并构建容器

这里只需要在shell中执行 docker-compose up -d 即可, 如果是第一次使用下载镜像文件的时间可能会稍微较长,请耐心等待。

如果一切顺利,这个容器应用就已经运行起来了,我们可以通过 docker-compose ps 来查看正在运行的容器。

1
2
3
4
5
➜  bitnami-docker-kafka git:(master) docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------------------------------------
bitnami-docker-kafka_kafka_1 /opt/bitnami/scripts/kafka ... Up 0.0.0.0:9092->9092/tcp
bitnami-docker-kafka_zookeeper_1 /opt/bitnami/scripts/zooke ... Up 0.0.0.0:2181->2181/tcp, 2888/tcp, 3888/tcp, 8080/tcp

如果你希望在开发环境中使用这个容器服务,你需要在 docker-compose.yml 文件中修改如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  kafka:
image: 'bitnami/kafka:2'
ports:
- '9092:9092'
+ - '9093:9093'
volumes:
- 'kafka_data:/bitnami'
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
+ - ALLOW_PLAINTEXT_LISTENER=yes
+ - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CLIENT:PLAINTEXT,EXTERNAL:PLAINTEXT
+ - KAFKA_CFG_LISTENERS=CLIENT://:9092,EXTERNAL://:9093
+ - KAFKA_CFG_ADVERTISED_LISTENERS=CLIENT://kafka:9092,EXTERNAL://localhost:9093
+ - KAFKA_INTER_BROKER_LISTENER_NAME=CLIENT

特别需要注意的是最后一项 KAFKA_INTER_BROKER_LISTENER_NAME 的配置一定需要配置,否则在启动镜像的过程中就会抛出异常,这里是对官网文档 Accessing Kafka with internal and external clients 的一个补充,参考了 Kafka Listeners - Explained 中的 相关配置

Cluster

// TODO

Kafka 使用的常见方法

以下的命令执行都是在容器内 kafka 所安装的 bin 目录下的各种 shell 下执行,所以需要先进入kafka 的bash环境中 docker-compose exec bitnami-docker-kafka_kafka_1 bash 然后进入 kafka 安装目录下的 bin 文件目录下 这里 bitnami 的目录是在 /opt/bitnami/kafka/bin

  • 创建topic
1
./kafka-topics.sh --create --zookeeper zookeeper:2181 --topic testtopic --partitions 1 --replication-factor 1
  • Producer 生产消息
1
2
3
4
5
./kafka-console-producer.sh --broker-list 127.0.0.1:9092 --topic testtopic
>
>hello
>world
>
  • Consumer 消费消息
1
2
3
4
5
./kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic testtopic --from-beginning

hello
world

Kafka 的常见类库

Python

关于这三个 client 的性能对比可以参考这个benchmark建议 Performance comparison of python kafka clients 以及这个对比实验 benchmarking by Matthew Rocklin

常见的 kafka 使用场景是作为一个 metric 系统的收集器,是待收集事件的 producer,对于应用开发模式来说,这是一个典型的 AOP 使用场景,在 Django 下又有 Middleware 组件来支持这种编程范式,下面的这个 Github gist 是对这个中间件的简单展示。

Java

// TODO

参考

文章目录
  1. 1. Kafka docker 的安装和设置
    1. 1.1. bitnami/kafka
      1. 1.1.1. Standalone
      2. 1.1.2. Cluster
  2. 2. Kafka 使用的常见方法
  3. 3. Kafka 的常见类库
    1. 3.1. Python
    2. 3.2. Java
  4. 4. 参考