k8s部署kafka和kafka的web管理客户端
一、写在前面
kafka在我们的项目中,作为一个消息中间件,对我们的业务功能,充当着十分重要的角色。
可以实现:系统解耦、异步通信、可恢复性等功能。
Kafka
是由LinkedIn开发的一个分布式基于发布/订阅的消息系统,使用Scala
编写,它以可水平扩展
和高吞吐率
而被广泛使用。
来自百度百科的解析如下:
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作([网页浏览],搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像[Hadoop]一样的[日志]数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过[Hadoop]的并行加载机制来统一线上和离线的消息处理,也是为了通过[集群]来提供实时的消息。
好了既然kafka充当着这么重要的角色,那我们不得学习一把?
万事开头难,那我们先把kafka跑起来再说!!!
那我们今天就来讲解下k8a环境下,部署kafka和kafka的web管理客户端
二、kafka部署
1.kafka镜像
k8s部署kafka,首先我们得先找好kafka镜像。
对于kafka镜像,我们可以选择自己制作,编写Dockerfile,自己build。
当然这里为了省事,我们可以选择别人已经制作好得镜像即可。上DockerHub找即可。
这里我们选择wurstmeister/kafka
镜像
这里我们选择: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得镜像。
这个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的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管理界面
这里对上面的那几个参数进行解析:
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
镜像
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管理界面
3.kafka-map使用教程
教程文档可以参考这里:kafka-map文档
- 访问
输入上面设置的账号密码:
admin/Jxbd123!@#
- 添加
就能看到对应的一些主题、broker、消费组等信息。
其他更多操作,可以查看:kafka-map文档
好了,以上就是我个人的实操了。可能有些不对,大家伙,轻点喷!!!
个人理解,可能也不够全面,班门弄斧了。
好了,今天就先到这里了!!!^_^
如果觉得有收获的,帮忙点赞、评论、收藏
一下呗!!!
转载自:https://juejin.cn/post/7202788189740187705