个人网站:

博客园:

本教程地址:

本教程是关于 Kafka 知识的教程,从 C# 中实践编写 Kafka 程序,一边写代码一边了解 Kafka。

教程内容是过年期间写的,写到一半假期结束要上班了,将已完成的部分整理出来,就不继续写了。

1, 搭建 Kafka 环境

本章的内容比较简单,我们将使用 快速部署一个单节点的 Kafka 或 Kafka 集群,在后面的章节中,将会使用已经部署好的 Kafka 实例做实验,然后我们通过不断地实验,逐渐了解 Kafka 的知识点以及掌握客户端的使用。

这里笔者给出了单机和集群两种部署方式,但是为了便于学习后面的章节,请以集群的方式部署 Kafka。

安装 -

使用 - 部署 Kafka 可以减少很多没必要的麻烦,一个脚本即可完成部署,省下折腾时间。

安装 - 也是挺简单的,直接下载二进制可执行文件即可。

INSTALLPATH=/usr/local/bin
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o ${INSTALLPATH}/docker-compose

sudo chmod +x ${INSTALLPATH}/docker-compose

docker-compose --version

如果系统没有映射/usr/local/bin/路径,执行命令完成后,如果发现找不到-命令,请将文件下载到/usr/bin,即替换=/usr/local/bin为=/usr/bin。

单节点 Kafka 的部署

创建一个 -.yml 文件kafka下载,文件内容如下:

---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.3.0
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000

broker:
image: confluentinc/cp-kafka:7.3.0
container_name: broker
ports:
# To learn about configuring Kafka for access across networks see
# https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.3.156:9092,PLAINTEXT_INTERNAL://broker:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
volumes:
- /data/kafka/broker/logs:/opt/kafka/logs
- /var/run/docker.sock:/var/run/docker.sock

请替换://192.168.3.156中的 IP 。

然后执行命令开始部署应用:

docker-compose up -d

接着kafka下载,安装 ,这是一个 Kafka 管理界面,可以很方便地查看一些信息。

docker run -d --rm  -p 9000:9000 
-e JVM_OPTS="-Xms32M -Xmx64M"
-e KAFKA_BROKERCONNECT=192.168.3.156:9092
-e SERVER_SERVLET_CONTEXTPATH="/"
obsidiandynamics/kafdrop

下载kafka教程_kafka_kafka下载

Kafka 集群的部署

Kafka 集群的部署方法有很多,方法不尽相同,其中使用的配置参数(环境变量)也很多,这里笔者只给出自己在使用的快速部署参数,读者可以参阅官方文档,以便定制配置。

笔者的部署脚本中其中一些重要的环境变量说明如下:

创建一个 -.yml 文件,文件内容如下:

---
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.3.0
container_name: zookeeper
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000

kafka1:
image: confluentinc/cp-kafka:7.3.0
container_name: broker1
ports:
- 19092:9092
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.3.158:19092
volumes:
- /data/kafka/broker1/logs:/opt/kafka/logs
- /var/run/docker.sock:/var/run/docker.sock

kafka2:
image: confluentinc/cp-kafka:7.3.0
container_name: broker2
ports:
- 29092:9092
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.3.158:29092
volumes:
- /data/kafka/broker2/logs:/opt/kafka/logs
- /var/run/docker.sock:/var/run/docker.sock

kafka3:
image: confluentinc/cp-kafka:7.3.0
container_name: broker3
ports:
- 39092:9092
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_NUM_PARTITIONS: 3
KAFKA_DEFAULT_REPLICATION_FACTOR: 2
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://192.168.3.158:39092
volumes:
- /data/kafka/broker3/logs:/opt/kafka/logs
- /var/run/docker.sock:/var/run/docker.sock

由于三个 实例都在同一个虚拟机上面,因此这里通过暴露不同的端口,避免 冲突。

然后执行命令开始部署应用:

docker-compose up -d

接着部署 :

docker run -d --rm  -p 9000:9000 
-e JVM_OPTS="-Xms32M -Xmx64M"
-e KAFKA_BROKERCONNECT=192.168.3.158:19092,192.168.3.158:29092,192.168.3.158:39092
-e SERVER_SERVLET_CONTEXTPATH="/"
obsidiandynamics/kafdrop

下载kafka教程_kafka_kafka下载

现在,已经部署好了 Kafka 环境以及管理面板。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注