likes
comments
collection
share

k8s部署kafka和kafka的web管理客户端

作者站长头像
站长
· 阅读数 10

一、写在前面

kafka在我们的项目中,作为一个消息中间件,对我们的业务功能,充当着十分重要的角色。

可以实现:系统解耦异步通信可恢复性等功能。

Kafka是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala编写,它以可水平扩展高吞吐率而被广泛使用。

来自百度百科的解析如下:

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作([网页浏览],搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像[Hadoop]一样的[日志]数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过[Hadoop]的并行加载机制来统一线上和离线的消息处理,也是为了通过[集群]来提供实时的消息。

好了既然kafka充当着这么重要的角色,那我们不得学习一把?

万事开头难,那我们先把kafka跑起来再说!!!

那我们今天就来讲解下k8a环境下,部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

二、kafka部署

1.kafka镜像

k8s部署kafka,首先我们得先找好kafka镜像。

对于kafka镜像,我们可以选择自己制作,编写Dockerfile,自己build。

当然这里为了省事,我们可以选择别人已经制作好得镜像即可。上DockerHub找即可。

这里我们选择wurstmeister/kafka镜像

k8s部署kafka和kafka的web管理客户端

这里我们选择:2.5.1版本。

docker pull wurstmeister/kafka:2.12-2.5.1

这里解析下这个kafka的版本号:

我们看下kafka版本号的组成[kafka_2.12-2.5.1]

前面的2.12表示的是kafka开发语言[Scala]的版本

后面的2.5.1才是kafka版本。

kafka需要依赖zookeeper,所以这里我们还得找一个zookeeper得镜像。

wurstmeister/zookeeper

k8s部署kafka和kafka的web管理客户端

这个latest对应的版本号为:3.4.13

docker pull wurstmeister/zookeeper:latest

2.kafka部署

2.1 zookeeper部署

zookeeper.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: zookeeper
  name: zookeeper
  namespace: jxbp
  resourceVersion: '48453302'
spec:
  progressDeadlineSeconds: 600
  replicas: 0
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/name: zookeeper
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/name: zookeeper
    spec:
      containers:
        - image: 'wurstmeister/zookeeper:latest'
          imagePullPolicy: IfNotPresent
          name: zookeeper
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /opt/zookeeper-3.4.13/data
              name: volume-data
            - mountPath: /etc/localtime
              name: volume-time
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - hostPath:
            path: /opt/jxbp/zookeeper/data
            type: Directory
          name: volume-data
        - hostPath:
            path: /etc/localtime
            type: File
          name: volume-time

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: zookeeper
  name: zookeeper
  namespace: jxbp
  resourceVersion: '47448621'
spec:
  clusterIP: 10.96.69.150
  clusterIPs:
    - 10.96.69.150
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: qqrr23
      nodePort: 2181
      port: 2181
      protocol: TCP
      targetPort: 2181
  selector:
    k8s.kuboard.cn/name: zookeeper
  sessionAffinity: None
  type: NodePort

挂载zookeeper容器的/opt/zookeeper-3.4.13/data文件夹到宿主机/opt/jxbp/zookeeper/data

挂载/etc/localtime,用于同步时间

创建NodePort,service暴露2181端口,用于kafka连接。

可能上面的yaml文件,大多数小伙看不太懂,那这里,我们可以使用kuboard客户端来进行部署。

k8s使用kuboard可视化客户端,可以参考我之前的文章k8s部署(juejin.cn/post/706770…)

  • kuboard管理界面

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

由上可见,这样就很清晰了,而且也比较容易懂。

拥抱可视化客户端

不过这里还是建议要学会看k8s的yaml文件,可视化客户端用多了,yaml文件反倒不会写了!!!

2.2 kafka部署

kafka.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: kafka
  name: kafka
  namespace: jxbp
  resourceVersion: '47467677'
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/name: kafka
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/name: kafka
    spec:
      containers:
        - env:
            - name: KAFKA_BROKER_ID
              value: '0'
            - name: KAFKA_ZOOKEEPER_CONNECT
              value: 'zookeeper:2181'
            - name: KAFKA_ADVERTISED_LISTENERS
              value: 'PLAINTEXT://192.168.4.xxx:9092'
            - name: KAFKA_LISTENERS
              value: 'PLAINTEXT://:9092'
            - name: KAFKA_PORT
              value: '9092'
            - name: KAFKA_LOG_DIRS
              value: /opt/kafka/logs-dirs
          image: 'wurstmeister/kafka:2.12-2.5.1'
          imagePullPolicy: IfNotPresent
          name: kafka
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /etc/localtime
              name: volume-time
            - mountPath: /opt/kafka/logs-dirs
              name: volume-data
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - hostPath:
            path: /opt/jxbp/kafka/data
            type: DirectoryOrCreate
          name: volume-data
        - hostPath:
            path: /etc/localtime
            type: File
          name: volume-time

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: kafka
  name: kafka
  namespace: jxbp
  resourceVersion: '47453631'
spec:
  clusterIP: 10.96.246.68
  clusterIPs:
    - 10.96.246.68
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: yzke4a
      nodePort: 9092
      port: 9092
      protocol: TCP
      targetPort: 9092
  selector:
    k8s.kuboard.cn/name: kafka
  sessionAffinity: None
  type: NodePort
  • kuboard管理界面

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

这里对上面的那几个参数进行解析:

KAFKA_BROKER_ID:0 #kafka集群中每个kafka都有一个BROKER_ID来区分自己

KAFKA_ZOOKEEPER_CONNECT:zookeeper:2181 #zookeeper地址

KAFKA_ADVERTISED_LISTENERS:PLAINTEXT://xxx.xxx:9092 #kafka的地址和端口,用于向zookeeper注册

KAFKA_LISTENERS:PLAINTEXT://:9092 #kafka监听端口

KAFKA_PORT:9092 #kafka的端口

KAFKA_LOG_DIRS:/opt/kafka/logs-dirs #kafka数据存放的目录

三、web客户端部署

1.kafka-map镜像

目前kafka客户端,大部分的都是c/s的客户端。

今天这里我们提供一个基于b/s的客户端,直接就能浏览器访问的。使用方便,快捷!!!

目前我们找到这样的一个镜像:dushixiang/kafka-map镜像

k8s部署kafka和kafka的web管理客户端

docker pull dushixiang/kafka-map:latest

2.kafka-map部署

  • kafka-map.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: kafka-map
  name: kafka-map
  namespace: jxbp
  resourceVersion: '47465531'
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      k8s.kuboard.cn/name: kafka-map
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        k8s.kuboard.cn/name: kafka-map
    spec:
      containers:
        - env:
            - name: DEFAULT_USERNAME
              value: admin
            - name: DEFAULT_PASSWORD
              value: Jxbd123!@#
            - name: SERVER_PORT
              value: '8081'
          image: 'dushixiang/kafka-map:latest'
          imagePullPolicy: IfNotPresent
          name: kafka-map
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          volumeMounts:
            - mountPath: /usr/local/kafka-map/data
              name: volume-data
            - mountPath: /etc/localtime
              name: volume-time
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      volumes:
        - hostPath:
            path: /opt/jxbp/kafka-map/data
            type: DirectoryOrCreate
          name: volume-data
        - hostPath:
            path: /etc/localtime
            type: File
          name: volume-time

---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    k8s.kuboard.cn/name: kafka-map
  name: kafka-map
  namespace: jxbp
  resourceVersion: '47461017'
spec:
  clusterIP: 10.96.74.51
  clusterIPs:
    - 10.96.74.51
  externalTrafficPolicy: Cluster
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: gtcemp
      nodePort: 8081
      port: 8081
      protocol: TCP
      targetPort: 8081
  selector:
    k8s.kuboard.cn/name: kafka-map
  sessionAffinity: None
  type: NodePort
  • kuboard管理界面

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

3.kafka-map使用教程

教程文档可以参考这里:kafka-map文档

  • 访问

192.168.4.xxx:8081

k8s部署kafka和kafka的web管理客户端

输入上面设置的账号密码:

admin/Jxbd123!@#

  • 添加

k8s部署kafka和kafka的web管理客户端

k8s部署kafka和kafka的web管理客户端

就能看到对应的一些主题、broker、消费组等信息。

其他更多操作,可以查看:kafka-map文档


好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!

个人理解,可能也不够全面,班门弄斧了。

好了,今天就先到这里了!!!^_^

如果觉得有收获的,帮忙点赞、评论、收藏一下呗!!!

k8s部署kafka和kafka的web管理客户端