侧边栏壁纸
博主头像
Blog博主等级

行动起来,活在当下

  • 累计撰写 211 篇文章
  • 累计创建 94 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

k3s部署单机kafka

一、部署单机版kafka

kafka部署之前先要部署zookeeper。编写部署zookeeper的YAML文件如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: zookeeper-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: zookeeper
  template:
    metadata:
      labels:
        app: zookeeper
    spec:
      containers:
      - name: zookeeper
        image: 192.168.1.192:5000/zookeeper:latest
        ports:
        - containerPort: 2181
        env:
        - name: ALLOW_ANONYMOUS_LOGIN
          value: "yes"
---
apiVersion: v1
kind: Service
metadata:
  name: zookeeper-service
spec:
  selector:
    app: zookeeper
  ports:
    - protocol: TCP
      port: 2181
      targetPort: 2181
      nodePort: 32181  # NodePort设置为32181
  type: NodePort

这里的镜像源我选择本地自建仓库。关于本地自建仓库部署方式见下一篇文章。

部署的大致过程是先使用deploy创建pod,容器内部应用端口为2181.再使用service将容器内部端口暴露出来,使得外部可以访问。这里使用nodeport方暴露应用端口。

32181(容器外):2181(容器内)。

1.部署zookeeper

# kubectl apply -f zk.yml

查看状态:

[root@k3s-master kafka]# kubectl get po 
NAME                                    READY   STATUS    RESTARTS        AGE
zookeeper-deployment-5bfb7d5b57-nc964   1/1     Running   0               3h53m
[root@k3s-master kafka]# kubectl get svc 
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
zookeeper-service   NodePort    10.43.238.86    <none>        2181:32181/TCP    3h54m

2.部署kafka

编写部署kafka的YAML文件.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kafka-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kafka
  template:
    metadata:
      labels:
        app: kafka
    spec:
      containers:
      - name: kafka
        image: 192.168.1.192:5000/kafka:latest
        ports:
        - containerPort: 9092
        command:
        - sh 
        - -c 
        - "exec /opt/bitnami/kafka/bin/kafka-server-start.sh /opt/bitnami/kafka/config/server.properties.original --override broker.id=0 \
          --override listeners=PLAINTEXT://:9092 \
          --override advertised.listeners=PLAINTEXT://192.168.1.189:30092 \
          --override zookeeper.connect=192.168.1.189:32181/kafka \
          --override auto.create.topics.enable=true \
          --override zookeeper.session.timeout.ms=6000 \
          --override zookeeper.set.acl=false" 
        env:
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name  
        - name: ALLOW_PLAINTEXT_LISTENER
          value: "yes"
        - name: KAFKA_HEAP_OPTS
          value : "-Xms1g -Xmx1g" 
---
apiVersion: v1
kind: Service
metadata:
  name: kafka-service
spec:
  type: NodePort
  ports:
  - port: 30092
    targetPort: 9092
    nodePort: 30092
  selector:
    app: kafka

这次选用的kafka镜像是:bitnami/kafka:latest和官方镜像有部分不同,所以在启动参数上有些更改。

简单说明下部署过程:

首先使用使用deploy部署pod,在保证不改变容器内原配置下,使用命令参数改变kafka启动方式。和zk一样,创建service并使用nodeport方式将容器应用端口暴露出来。

30092(容器外):9092(容器内)。

应用配置,并查看应用部署状态:

[root@k3s-master kafka]# kubectl get po 
NAME                                    READY   STATUS    RESTARTS        AGE
zookeeper-deployment-5bfb7d5b57-nc964   1/1     Running   0               4h4m
kafka-deployment-5458486459-cqmcl       1/1     Running   1 (3h46m ago)   3h47m
[root@k3s-master kafka]# kubectl get svc 
NAME                TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
zookeeper-service   NodePort    10.43.238.86    <none>        2181:32181/TCP    4h4m
kafka-service       NodePort    10.43.217.79    <none>        30092:30092/TCP   3h47m

二、测试

创建kafka主题。进入到kafka的pod中,使用自带的命令行客户端工具。

[root@k3s-master kafka]# kubectl exec -it po kafka-deployment-5458486459-cqmcl bash 
kubectl exec [POD] [COMMAND] is DEPRECATED and will be removed in a future version. Use kubectl exec [POD] -- [COMMAND] instead.
Error from server (NotFound): pods "po" not found
[root@k3s-master kafka]# kubectl exec -it  kafka-deployment-5458486459-cqmcl -- bash 
I have no name!@kafka-deployment-5458486459-cqmcl:/$ cd /opt/bitnami/kafka/bin/
I have no name!@kafka-deployment-5458486459-cqmcl:/opt/bitnami/kafka/bin$ ls
connect-distributed.sh	      kafka-console-consumer.sh    kafka-get-offsets.sh		 kafka-replica-verification.sh	     kafka-verifiable-producer.sh
connect-mirror-maker.sh       kafka-console-producer.sh    kafka-jmx.sh			 kafka-run-class.sh		     trogdor.sh
connect-plugin-path.sh	      kafka-consumer-groups.sh	   kafka-leader-election.sh	 kafka-server-start.sh		     windows
connect-standalone.sh	      kafka-consumer-perf-test.sh  kafka-log-dirs.sh		 kafka-server-stop.sh		     zookeeper-security-migration.sh
kafka-acls.sh		      kafka-delegation-tokens.sh   kafka-metadata-quorum.sh	 kafka-storage.sh		     zookeeper-server-start.sh
kafka-broker-api-versions.sh  kafka-delete-records.sh	   kafka-metadata-shell.sh	 kafka-streams-application-reset.sh  zookeeper-server-stop.sh
kafka-client-metrics.sh       kafka-dump-log.sh		   kafka-mirror-maker.sh	 kafka-topics.sh		     zookeeper-shell.sh
kafka-cluster.sh	      kafka-e2e-latency.sh	   kafka-producer-perf-test.sh	 kafka-transactions.sh
kafka-configs.sh	      kafka-features.sh		   kafka-reassign-partitions.sh  kafka-verifiable-consumer.sh

1.创建第一个Topic 

$ ./kafka-topics.sh --bootstrap-server 127.0.0.1:9092 --create --topic test001 --partitions 100 --replication-factor 1

查看详情

$ ./kafka-topics.sh --bootstrap-server  127.0.0.1:9092 --list 
test001

2.kafka-topics.sh工具介绍

kafka-topics.sh 是 Apache Kafka 提供的一个命令行工具,用于管理 Kafka 集群中的主题(topics)。我们可以使用它来创建、列出、描述、修改或删除主题。


列出所有主题:

bin/kafka-topics.sh --list --bootstrap-server <kafka_connect_string>

创建主题

bin/kafka-topics.sh --create --bootstrap-server <kafka_connect_string> --replication-factor <replication_factor> --partitions <num_partitions> --topic <topic_name>
  • --replication-factor 是每个分区的副本数量。

  • --partitions 是主题中的分区数量。

  • --topic 是要创建的主题的名称。

描述主题

bin/kafka-topics.sh --describe --bootstrap-server <kafka_connect_string> --topic <topic_name>

删除主题

默认情况下,Kafka 不会自动删除主题。但是,如果Kafka 集群启用了 delete.topic.enable 配置(在 server.properties 中),可以使用以下命令来删除主题:

bin/kafka-topics.sh --delete --bootstrap-server <kafka_connect_string>  --topic <topic_name>

但是,请注意,即使删除了主题,Kafka 也会保留与该主题相关的日志文件,除非也配置了日志删除策略。

三、部署kafka-ui

docker run -itd -p 18080:8080 -e DYNAMIC_CONFIG_ENABLED=true provectuslabs/kafka-ui

访问方式

http://服务器ip:18080

填写集群信息后,可以查询brokers、topics和consumers。

0

评论区