Knative - 生产环境推荐使用 Kafka与Eventing 【十三】

关于Kafka

#Kafka是一个分布式流式数据平台,它具有三个关键特性
◼ Messaging System:Pub-Sub消息系统
◼ Availability & Reliability:以容错及持久化的方式存储数据记录流
◼ Scalable & Real time

Kafka架构体系

#Kafka系统中存在5个关键组件 
    ◼ Producer 
    ◼ Consumer 
    ◼ Kafka Cluster
        ◆Broker:Kafka Server,或Kafka Node 
        ◆Zookeeper:集群状态存储 
    ◼ Connector:连接应用程序和Topic 
    ◼ Stream Processor:流处理器,从一个 Topic接收并处理流式数据,并将结果存入另一个Topic
#还有两个重要的逻辑组件 
    ◼ Topic 
    ◼ Partition

Topic 和 Partition

#关于Topic和Partition
    ◼ Topic分类的消息流,相关的消息保存于Partition中
        ◆一个Topic中的数据,可以分布保存于一至多个Partition中
        ◆每个Partition中,通常存在一个leader,以及一至多个replicas/followers
    ◼ Topic是Producer发布消息,以及Consumer消费消息时使用的端点

Topic中的消息记录

#消息及存储方式
    ◼ Kafka中,每个消息记录(record)的标准格式通常由key、value、timestamp和一些metadata组成;
    ◼ 待存入Topic的消息记录未明确指定目标Partition时,Kafka会根据记录的key的hash码选择一个Partition;未明
        确指定timestamp时,Producer将会使用当前时间(创建时间或附加到日志的时间)作为其时间戳;
    ◼ Kafka将数据持久存储在log.dir参数指定 的目录中,而各topic会映射进该目录的子目录中;
        ◆Kafka会保留所有记录,无论它们是否已被消费
        ◆记录在broker配置中定义的retention period内保留,默认时长为7天(168小时)
    ◼ Kafka基于Pub/Sub和Queue模型构建Topic,它使用消费者组(Consumer Group)的概念将处理任务划分为一
        组消费者进程并行运行,并且可以将消息广播到多个组中;

Partition

#Partition
    ◼ Partition代表Topic中的数据分片,在其它数据库系统中,通常称为replica或shard;
        ◆每个Partition都是一个按时间排序的不可变记录序列,该序列存储于日志中;
        ◆消费者按照记录在日志中的存储顺序读取消息;
        ◆每个消息都有一个称为offset的id
    ◼ 能够将一个Topic中的数据并行存储于多个broker上;
    ◼ 支持以冗余机制(复制因子大于1)存储多个副本,并能容忍最多N-1个服务器故障,N为复制因子数量;
    ◼ 消费者读取一个Topic时,它将从所有Partition中读取数据

Knative Eventing 与 Kafka

#Knative Eventing中的Kafka存在三类组件,它们彼此间不存在依赖关系,各自可独立用于同Eventing中的其它组件协同
    ◼ KafkaSource
        ◆负责从Kafka集群中读取消息,并转换为CloudEvents后引入到Eventing之中
    ◼ KafkaChannel
        ◆Knative Eventing Channel的实现之一
        ◆功能与InMemoryChannel类似,但能够提供持久化等功能,是生产环境中推荐使用的类型
    ◼ KafkaBroker
        ◆Knative Eventing Broker的实现之一,功能与MT-Channel-Based Broker功能类似;
        ◆依赖于KafkaChannel类型的Channel实现

部署Kafka

#Kafka集群的部署途径
    ◼ Knative Eventing中的三类Kafka组件,在其后端都依赖于一个正常运行着的Kafka集群
    ◼ Strimzi项目中的Kafka-Operator是专用于在Kubernetes集群上管理Kafka集群的Operator,它能够大大简化在Kubernetes上部署和使用Kafka的复杂度
#部署kafka-operator
    ◼ 创建专用的名称空间,例如kafka:kubectl create namespace kafka
    ◼ 基于配置文件部署strimzi-cluster-operator
        ◆kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka
    ◼ 查看部署的结果
        ◆kubectl get pods -l strimzi.io/kind=cluster-operator -n kafka
    ◼ 查看生成的CRD
        ◆kubectl api-resources --api-group='kafka.strimzi.io'
#部署Kafka示例集群
    ◼ 为帮忙用户基于Kafka CRD快速部署Kafka集群,Strimzi提供了几个示例配置
        ◆kafka-ephemeral-single.yaml:非持久化存储,单节点集群;
        ◆kafka-ephemeral.yaml:非持久化存储,多节点集群;
        ◆kafka-jbod.yaml:jbod存储,多节点集群;
        ◆kafka-persistent-single.yaml:持久化存储,单节点集群;
        ◆kafka-persistent.yaml :持久化存储,多节点集群;
    ◼ 以定义了单节点、临时存储集群的kafka-ephemeral-single配置为例(这里采用目前最新的0.28.0版本)
        ◆kubectl apply -f https://github.com/strimzi/strimzi-kafka-operator/blob/0.28.0/examples/kafka/kafka-ephemeral-single.yaml
    ◼ 等待集群部署完成
        ◆kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka
    ◼ 部署集群时,还会自动为集群生成几个相关的Service资源,其中的bootstrap是集群消息服务的访问端点,如下面示例中的my-cluster-kafka-bootstrap
        ◆kubectl get svc -n kafka

#Optional: Install a Broker layer

#使用Stimzi项目进行部署 Kafka
#https://strimzi.io/quickstarts/

kubectl create namespace kafka

#2024-01-16 需要镜像
quay.io/strimzi/operator:0.39.0
quay.io/strimzi/kafka:0.39.0-kafka-3.6.1

#2023需要镜像
crictl pull quay.io/strimzi/operator:0.35.1 && \
crictl pull quay.io/strimzi/kafka:0.35.1-kafka-3.3.1 && \
crictl pull quay.io/strimzi/kafka:0.35.1-kafka-3.3.2 && \
crictl pull quay.io/strimzi/kafka:0.35.1-kafka-3.4.0 && \
crictl pull quay.io/strimzi/kafka-bridge:0.25.0 && \
crictl pull quay.io/strimzi/kaniko-executor:0.35.1 && \
crictl pull quay.io/strimzi/maven-builder:0.35.1

[root@xianchaonode1 ~]# crictl images list | grep strimzi
W0708 09:35:18.935466   57266 util_unix.go:103] Using "/run/containerd/containerd.sock" as endpoint is deprecated, please consider using full url format "unix:///run/containerd/containerd.sock".
quay.io/strimzi/kafka-bridge                                                           0.25.0               5ff7382047267       163MB
quay.io/strimzi/kafka                                                                  0.35.1-kafka-3.3.1   ee044d4091a63       340MB
quay.io/strimzi/kafka                                                                  0.35.1-kafka-3.3.2   d8a7ed694a7c4       341MB
quay.io/strimzi/kafka                                                                  0.35.1-kafka-3.4.0   a4b40ea000bba       341MB
quay.io/strimzi/kaniko-executor                                                        0.35.1               216e62d586331       28.6MB
quay.io/strimzi/maven-builder                                                          0.35.1               0b427d60c1233       319MB
quay.io/strimzi/operator                                                               0.35.1               66159569847c5       256MB

[root@xianchaomaster1 KnativeSrc]# kubectl create -f 'https://strimzi.io/install/latest?namespace=kafka' -n kafka

[root@xianchaomaster1 KnativeSrc]# kubectl get pods -n kafka
NAME                                        READY   STATUS    RESTARTS   AGE
strimzi-cluster-operator-7689fcff94-m5d2q   1/1     Running   0          42s

[root@xianchaomaster1 KnativeSrc]# kubectl api-resources --api-group=kafka.strimzi.io
NAME                 SHORTNAMES   APIVERSION                 NAMESPACED   KIND
kafkabridges         kb           kafka.strimzi.io/v1beta2   true         KafkaBridge
kafkaconnectors      kctr         kafka.strimzi.io/v1beta2   true         KafkaConnector
kafkaconnects        kc           kafka.strimzi.io/v1beta2   true         KafkaConnect
kafkamirrormaker2s   kmm2         kafka.strimzi.io/v1beta2   true         KafkaMirrorMaker2
kafkamirrormakers    kmm          kafka.strimzi.io/v1beta2   true         KafkaMirrorMaker
kafkarebalances      kr           kafka.strimzi.io/v1beta2   true         KafkaRebalance
kafkas               k            kafka.strimzi.io/v1beta2   true         Kafka
kafkatopics          kt           kafka.strimzi.io/v1beta2   true         KafkaTopic
kafkausers           ku           kafka.strimzi.io/v1beta2   true         KafkaUser

Create an Apache Kafka cluster

#下载文件路径
#https://github.com/strimzi/strimzi-kafka-operator/tree/main/examples/kafka

#注意不能用https://github.com/strimzi/strimzi-kafka-operator/blob/release-0.31.x/examples/kafka/kafka-ephemeral.yaml版本 会报错启动日志会报错
#Unsupported Kafka.spec.kafka.version: 3.2.3. Supported versions are: [3.3.1, 3.3.2, 3.4.0]

#下载文件0.32版本
#https://github.com/strimzi/strimzi-kafka-operator/blob/release-0.32.x/examples/kafka/kafka-ephemeral.yaml

# Apply the `Kafka` Cluster CR file
kubectl apply -f https://github.com/strimzi/strimzi-kafka-operator/blob/release-0.32.x/examples/kafka/kafka-ephemeral.yaml -n kafka 

[root@xianchaomaster1 KnativeSrc]# kubectl apply -f kafka-ephemeral.yaml -n kafka
kafka.kafka.strimzi.io/my-cluster created

#启动会拉起来3个kafka、3个zookeeper、一个entity-operator
[root@xianchaomaster1 KnativeSrc]# kubectl get pods -n kafka
NAME                                         READY   STATUS    RESTARTS      AGE
my-cluster-entity-operator-7f6849f7f-9pzx6   3/3     Running   1 (51s ago)   5m34s
my-cluster-kafka-0                           1/1     Running   0             5m58s
my-cluster-kafka-1                           1/1     Running   0             5m58s
my-cluster-kafka-2                           1/1     Running   0             5m58s
my-cluster-zookeeper-0                       1/1     Running   0             6m21s
my-cluster-zookeeper-1                       1/1     Running   0             6m21s
my-cluster-zookeeper-2                       1/1     Running   0             6m21s
strimzi-cluster-operator-7689fcff94-rfl8f    1/1     Running   2 (51s ago)   12h

[root@xianchaomaster1 KnativeSrc]# kubectl get svc -n kafka
NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)                               AGE
my-cluster-kafka-bootstrap    ClusterIP   10.96.27.125   <none>        9091/TCP,9092/TCP,9093/TCP            2m35s
my-cluster-kafka-brokers      ClusterIP   None           <none>        9090/TCP,9091/TCP,9092/TCP,9093/TCP   2m35s
my-cluster-zookeeper-client   ClusterIP   10.96.159.67   <none>        2181/TCP                              2m58s
my-cluster-zookeeper-nodes    ClusterIP   None           <none>        2181/TCP,2888/TCP,3888/TCP            2m58s

Send and receive messages

#创建 消息
[root@xianchaomaster1 KnativeSrc]# kubectl -n kafka run kafka-producer -ti --image=quay.io/strimzi/kafka:0.35.1-kafka-3.4.0 --rm=true --restart=Never -- bin/kafka-console-producer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic
If you don't see a command prompt, try pressing enter.
Hi Hye^H^He
Hi xks

#另开一个终端 显示了消息
[root@xianchaomaster1 ~]# kubectl -n kafka run kafka-consumer -ti --image=quay.io/strimzi/kafka:0.35.1-kafka-3.4.0 --rm=true --restart=Never -- bin/kafka-console-consumer.sh --bootstrap-server my-cluster-kafka-bootstrap:9092 --topic my-topic --from-beginning
If you don't see a command prompt, try pressing enter.
Hi Heye
Hi Hee
Hi xks

#创建了连个kafka-consumer、kafka-producer                    
[root@xianchaomaster1 ~]# kubectl get pods -n kafka
NAME                                         READY   STATUS    RESTARTS        AGE
kafka-consumer                               1/1     Running   0               8m41s
kafka-producer                               1/1     Running   0               9m39s
my-cluster-entity-operator-7f6849f7f-45zxr   3/3     Running   0               11m
my-cluster-kafka-0                           1/1     Running   3 (4m20s ago)   12m
my-cluster-kafka-1                           1/1     Running   0               12m
my-cluster-kafka-2                           1/1     Running   3 (4m20s ago)   12m
my-cluster-zookeeper-0                       1/1     Running   2 (4m41s ago)   12m
my-cluster-zookeeper-1                       1/1     Running   1 (5m18s ago)   12m
my-cluster-zookeeper-2                       1/1     Running   1 (5m22s ago)   12m
strimzi-cluster-operator-7689fcff94-mhzm5    1/1     Running   0               35m

#
[root@xianchaomaster1 ~]#  kubectl get KafkaTopic -n kafka
NAME                                                                                               CLUSTER      PARTITIONS   REPLICATION FACTOR   READY
consumer-offsets---84e7a678d08f4bd226872e5cdd4eb527fadc1c6a                                        my-cluster   50           3                    True
my-topic                                                                                           my-cluster   1            3                    True
strimzi-store-topic---effb8e3e057afce1ecf67c3f5d8e4e3ff177fc55                                     my-cluster   1            3                    True
strimzi-topic-operator-kstreams-topic-store-changelog---b75e702040b99be8a9263134de3507fc0cc4017b   my-cluster   1            3                    True

Optional: Install a default Channel (messaging) layer

Apache Kafka Channel

https://knative.dev/development/install/yaml-install/eventing/install-eventing-with-yaml/#install-knative-eventing

#官网版本 我们不下载
kubectl apply -f https://storage.googleapis.com/knative-nightly/eventing-kafka-broker/latest/eventing-kafka-controller.yaml
kubectl apply -f https://storage.googleapis.com/knative-nightly/eventing-kafka-broker/latest/eventing-kafka-channel.yaml

#我们下载1.7.1版本
https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-controller.yaml
https://github.com/knative-extensions/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-channel.yaml
https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-broker.yaml

#【eventing-kafka-controller.yaml】
#修改镜像eventing-kafka-controller.yaml
gcr.io/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/kafka-controller@sha256:ca67f666f8f581d8d0d9464ce18a6061c3b04f37de94777779b90dff15b22c96
gcr.io/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/webhook-kafka@sha256:94a45d86f802e52acb238ae0e7ec2ef1b52e20816a334c3fe51da7174d0a1e13
改为
gcr.lank8s.cn/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/kafka-controller@sha256:ca67f666f8f581d8d0d9464ce18a6061c3b04f37de94777779b90dff15b22c96
gcr.lank8s.cn/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/webhook-kafka@sha256:94a45d86f802e52acb238ae0e7ec2ef1b52e20816a334c3fe51da7174d0a1e13

#下载镜像
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/kafka-controller@sha256:ca67f666f8f581d8d0d9464ce18a6061c3b04f37de94777779b90dff15b22c96
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative.dev/eventing-kafka-broker/control-plane/cmd/webhook-kafka@sha256:94a45d86f802e52acb238ae0e7ec2ef1b52e20816a334c3fe51da7174d0a1e13

#创建资源
[root@xianchaomaster1 KnativeSrc]# kubectl apply -f eventing-kafka-controller.yaml

#kafka-controller-75447f945b-5w54k         1/1     Running   0             63s
#kafka-webhook-eventing-64574d6f88-r276n   1/1     Running   0             63s
[root@xianchaomaster1 KnativeSrc]# kubectl get pods -n knative-eventing
NAME                                      READY   STATUS    RESTARTS      AGE
eventing-controller-7b6fc5969c-k4wnl      1/1     Running   0             64m
eventing-webhook-786dbf4c49-rkfzk         1/1     Running   1 (33m ago)   64m
imc-controller-68d854949d-97599           1/1     Running   1 (33m ago)   64m
imc-dispatcher-7c8f6559b9-r4jsk           1/1     Running   1 (34m ago)   64m
kafka-controller-75447f945b-5w54k         1/1     Running   0             63s
kafka-webhook-eventing-64574d6f88-r276n   1/1     Running   0             63s
mt-broker-controller-86dd98fd58-4lnb5     1/1     Running   0             64m
mt-broker-filter-587668dcc6-kqc6d         1/1     Running   0             64m
mt-broker-ingress-84bddff64f-f6dbb        1/1     Running   0             64m
pingsource-mt-adapter-5b8886979c-6mrjs    1/1     Running   0             64m

#【eventing-kafka-channel.yaml】
gcr.io/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
gcr.io/knative-releases/knative-kafka-broker-receiver:v1.7.1
改为
gcr.lank8s.cn/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
gcr.lank8s.cn/knative-releases/knative-kafka-broker-receiver:v1.7.1
#下载镜像
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative-kafka-broker-receiver:v1.7.1

[root@xianchaomaster1 KnativeSrc]# kubectl apply -f eventing-kafka-channel.yaml

#kafka-channel-dispatcher-67c49cb676-9hbx9   1/1     Running   0             10s
#kafka-channel-receiver-654759f44f-4mglh     1/1     Running   0             10s
[root@xianchaomaster1 KnativeSrc]# kubectl get pods -n knative-eventing
NAME                                        READY   STATUS    RESTARTS      AGE
eventing-controller-7b6fc5969c-k4wnl        1/1     Running   0             81m
eventing-webhook-786dbf4c49-rkfzk           1/1     Running   1 (50m ago)   81m
imc-controller-68d854949d-97599             1/1     Running   1 (50m ago)   81m
imc-dispatcher-7c8f6559b9-r4jsk             1/1     Running   1 (51m ago)   81m
kafka-channel-dispatcher-67c49cb676-9hbx9   1/1     Running   0             10s
kafka-channel-receiver-654759f44f-4mglh     1/1     Running   0             10s
kafka-controller-75447f945b-5w54k           1/1     Running   0             17m
kafka-webhook-eventing-64574d6f88-r276n     1/1     Running   0             17m
mt-broker-controller-86dd98fd58-4lnb5       1/1     Running   0             81m
mt-broker-filter-587668dcc6-kqc6d           1/1     Running   0             81m
mt-broker-ingress-84bddff64f-f6dbb          1/1     Running   0             81m
pingsource-mt-adapter-5b8886979c-6mrjs      1/1     Running   0             81m

Optional: Install a Broker layer

【Apache Kafka Broker】

#1.【eventing-kafka-controller.yaml和上面一样 重复】
kubectl apply -f eventing-kafka-controller.yaml


#2.【eventing-kafka-broker.yam】
#官方kubectl apply -f https://storage.googleapis.com/knative-nightly/eventing-kafka-broker/latest/eventing-kafka-broker.yaml
#下载地址
https://github.com/knative-sandbox/eventing-kafka-broker/releases/download/knative-v1.7.1/eventing-kafka-broker.yaml

#修改镜像
gcr.io/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
gcr.io/knative-releases/knative-kafka-broker-receiver:v1.7.1
改为
gcr.lank8s.cn/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
gcr.lank8s.cn/knative-releases/knative-kafka-broker-receiver:v1.7.1

#下载镜像
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative-kafka-broker-dispatcher:v1.7.1
[root@xianchaonode1 ~]# crictl pull gcr.lank8s.cn/knative-releases/knative-kafka-broker-receiver:v1.7.1

[root@xianchaomaster1 KnativeSrc]# kubectl apply -f eventing-kafka-broker.yaml

#kafka-broker-dispatcher-556fddf779-z64kr    1/1     Running   0               9s
#kafka-broker-receiver-879b9b9b8-zvx6j       1/1     Running   0               9s
[root@xianchaomaster1 KnativeSrc]# kubectl get pods -n knative-eventing
NAME                                        READY   STATUS    RESTARTS        AGE
eventing-controller-7b6fc5969c-k4wnl        1/1     Running   1 (4m24s ago)   90m
eventing-webhook-786dbf4c49-rkfzk           1/1     Running   2 (4m24s ago)   90m
imc-controller-68d854949d-97599             1/1     Running   2 (4m24s ago)   90m
imc-dispatcher-7c8f6559b9-r4jsk             1/1     Running   2 (4m24s ago)   90m
kafka-broker-dispatcher-556fddf779-z64kr    1/1     Running   0               9s
kafka-broker-receiver-879b9b9b8-zvx6j       1/1     Running   0               9s
kafka-channel-dispatcher-67c49cb676-9hbx9   1/1     Running   1 (4m24s ago)   9m
kafka-channel-receiver-654759f44f-4mglh     1/1     Running   2 (4m24s ago)   9m
kafka-controller-75447f945b-5w54k           1/1     Running   1 (4m24s ago)   26m
kafka-webhook-eventing-64574d6f88-r276n     1/1     Running   1 (4m24s ago)   26m
mt-broker-controller-86dd98fd58-4lnb5       1/1     Running   1 (4m24s ago)   90m
mt-broker-filter-587668dcc6-kqc6d           1/1     Running   2 (3m43s ago)   90m
mt-broker-ingress-84bddff64f-f6dbb          1/1     Running   2 (3m46s ago)   90m
pingsource-mt-adapter-5b8886979c-6mrjs      1/1     Running   1 (4m24s ago)   90m

 

posted @ 2023-07-08 22:50  しみずよしだ  阅读(141)  评论(0)    收藏  举报