来源参考的deepseek,如有侵权联系立删
Kafka是分布式流处理平台,由 Scala 和 Java 编写。Kafka 的核心概念和组件包括:
详细介绍
这些组件共同构成了 Kafka 的核心架构,使其能够实现高吞吐量、低延迟、可扩展性和持久化的消息传递和处理。
docker pull wurstmeister/zookeeper
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
docker pull wurstmeister/kafka
docker run -d --name kafka -p 9092:9092 --link zookeeper:zookeeper \
-v /etc/localtime:/etc/localtime \
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://127.0.0.1:9092 \
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 wurstmeister/kafka
--name kafka: 设置容器的名字为“kafka”。
-p 9092:9092: 将容器的9092端口映射到宿主机的9092端口。
--link zookeeper:zookeeper: 连接到名为“zookeeper”的另一个Docker容器,并且在当前的容器中可以通过zookeeper这个别名来访问它。
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181: 设置环境变量,指定ZooKeeper的连接字符串。
--env KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092: 设置环境变量,指定Kafka的advertised listeners。
--env KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092: 设置环境变量,指定Kafka的listeners。
--env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1: 设置环境变量,指定offsets topic的副本因子。
wurstmeister/kafka: 使用的Docker镜像名字。
/opt/kafka/config/server.properties #镜像内部配置文件地址
./kafka-server-start.sh -daemon ./config/server.properties #启动命令
kafka-topics.sh --create --bootstrap-server 127.0.0.1:9092 \
--replication-factor 1 --partitions 1 --topic mytest
kafka-topics.sh \
--delete --topic lx \
--zookeeper 127.0.0.1:2181
docker run --name kafka-ui -p 19092:8080 \
-e KAFKA_CLUSTERS_0_NAME=local \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=127.0.0.1:9092 \
-d provectuslabs/kafka-ui:latest
1.宿主机创建用户密码配置文件
#创建文件
touch /dockerData/kafka/config/kafka_server_jaas.conf
2.编辑kafka_server_jaas.conf配置
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="123456"
user_admin="123456"
user_moshangshang="123456";
};
user_admin="123456"
user_后面跟的是用户名,然后123456为密码,可配置多个用户密码
3.运行kafka容器
docker run -d --name kafka -p 9092:9092 --link zookeeper:zookeeper \
-v /etc/localtime:/etc/localtime \
-v /dockerData/kafka/config/kafka_server_jaas.conf:/opt/kafka/config/kafka_server_jaas.conf \
--env KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 \
--env 192.168.1.250:9092 \
--env KAFKA_LISTENERS=SASL_PLAINTEXT://0.0.0.0:9092 \
--env KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/kafka_server_jaas.conf" \
--env KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 wurstmeister/kafka
4.宿主机创建kafka的server.properties 配置
5.修改并添加认证相关配置
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://192.168.1.250:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
6.拷贝宿主机配置文件覆盖容器内部原本文件
docker cp /dockerData/kafka/config/server.properties kafka:/opt/kafka/config
7.重启容器
8.整合springboot的yml配置
#kafka配置
spring:
kafka:
#kafka集群地址
bootstrap-servers: 192.168.25.100:9092
producer:
#批量发送的数据量大小
batch-size: 1
#可用发送数量的最大缓存
buffer-memory: 33554432
#key序列化器
key-serializer: org.apache.kafka.common.serialization.StringSerializer
#value序列化器
value-serializer: org.apache.kafka.common.serialization.StringSerializer
#达到多少时间后,会发送
properties:
linger.ms: 1
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="123456";
#代表集群中从节点都持久化后才认为发送成功
acks: -1
consumer:
enable-auto-commit: false
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
properties:
session.timeout.ms: 15000
security.protocol: SASL_PLAINTEXT
sasl.mechanism: PLAIN
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="123456";
group-id: test
auto-offset-reset: earliest
listener:
ack-mode: MANUAL # 精准控制offset提交
concurrency: 3 # 并发消费者数
type: batch
9.kafka-ui配置认证
docker run --name kafka-ui -p 19092:8080 \
-e KAFKA_CLUSTERS_0_NAME=local \
-e KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=192.168.1.250:9092 \
-e KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL=SASL_PLAINTEXT \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM=PLAIN \
-e KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG="org.apache.kafka.common.security.plain.PlainLoginModule required username='moshangshang' password='123456';" \
-d provectuslabs/kafka-ui:latest