7.3. Kafka 集群配置
kafka 集群包含一个或多个代理。要使生产者和消费者能够访问代理中的主题,Kafka 配置必须定义如何存储数据,以及如何访问数据。您可以将 Kafka 集群配置为使用多个代理节点在机架之间运行。
- 存储
Kafka 和 ZooKeeper 将数据存储到磁盘上。
AMQ Streams 需要通过
StorageClass
置备块存储。存储的文件系统格式为 XFS 或 EXT4。支持三种类型的数据存储:- Ephemeral (推荐只在开发时使用)
- 临时存储在实例生命周期内存储数据。实例重启时数据会丢失。
- 持久性
- 持久性存储与独立于实例生命周期的长期数据存储相关。
- JBOD (Just a Bunch Disks,仅适用于 Kafka)
- JBOD 允许您使用多个磁盘将提交日志存储到每个代理中。
如果基础架构支持,可以增加现有 Kafka 集群使用的磁盘容量。
- 监听器
侦听器配置客户端如何连接到 Kafka 集群。
通过在 Kafka 集群中为每个监听程序指定唯一名称和端口,您可以配置多个监听程序。
支持以下监听程序类型:
- 用于在 OpenShift 中访问的内部监听程序
- 用于在 OpenShift 外部进行访问的 外部监听器
您可以为监听器启用 TLS 加密,并配置身份验证。
内部监听程序通过指定一个
internal
类型来公开 Kafka:-
在同一 OpenShift 集群内连接的
内部
-
cluster-ip
使用针对每个代理的ClusterIP
服务公开 Kafka
外部监听程序通过指定一个外部
类型
来公开 Kafka:-
使用 OpenShift 路由和默认 HAProxy 路由器的
路由
-
LoadBalancer
使用负载均衡器服务 -
NodePort
使用 OpenShift 节点上的端口 -
Ingress
使用 OpenShift Ingress 和 Ingress NGINX Controller for Kubernetes
注意使用
cluster-ip
类型可以添加您自己的访问机制。例如,您可以将监听程序与自定义 Ingress 控制器或 OpenShift 网关 API 搭配使用。
如果您使用 OAuth 2.0 进行基于令牌的身份验证,您可以将监听程序配置为使用授权服务器。
- 机架感知
-
机架代表数据中心,或数据中心中的机架,或可用性区域。配置机架感知,以在机架之间分发 Kafka 代理 pod 和主题副本。使用
rack
属性启用机架感知,以指定topologyKey
。topologyKey
是分配给 OpenShift worker 节点的标签的名称,用于标识机架。AMQ Streams 为每个 Kafka 代理分配一个机架 ID。Kafka 代理使用 ID 在机架间分布分区副本。您还可以指定RackAwareReplicaSelector
选择器插件,以用于机架感知。该插件与代理和消费者的机架 ID 匹配,以便消息从最接近的副本消耗。要使用插件,消费者还必须启用机架感知。您可以在 Kafka Connect、M MirrorMaker 2 和 Kafka Bridge 中启用机架感知。
显示 Kafka 配置的 YAML 示例
apiVersion: kafka.strimzi.io/v1beta2 kind: Kafka metadata: name: my-cluster spec: kafka: # ... listeners: - name: tls port: 9093 type: internal tls: true authentication: type: tls - name: external1 port: 9094 type: route tls: true authentication: type: tls # ... storage: type: persistent-claim size: 10000Gi # ... rack: topologyKey: topology.kubernetes.io/zone config: replica.selector.class: org.apache.kafka.common.replica.RackAwareReplicaSelector # ...