7.3. Kafka 集群配置
kafka 集群包含一个或多个代理。要使生产者和消费者能够访问代理中的主题,Kafka 配置必须定义如何存储数据,以及如何访问数据。您可以将 Kafka 集群配置为使用多个代理节点在机架之间运行。
7.3.1. Storage 复制链接链接已复制到粘贴板!
Apache Kafka 的流支持以下存储配置选项来管理 Kafka 和 ZooKeeper 数据:
- Ephemeral (推荐只在开发时使用)
- 临时存储在实例生命周期内存储数据。实例重启时数据会丢失。
- 持久性
- 持久性存储与独立于实例生命周期的长期数据存储相关。
- JBOD (Just a Bunch Disks,仅适用于 Kafka)
- JBOD 允许您使用多个磁盘将提交日志存储到每个代理中。
除了这些选项外,您还可以将 Apache Kafka 的 Streams 配置为使用分层存储。分层存储是 Kafka 中的 早期访问 功能,通过利用具有不同特征的并行使用存储类型为数据管理提供更大的灵活性。虽然其中一项基本存储选项必须配置为分层存储,但其支持组合,例如使用对象存储的块存储,以提高性能和可扩展性。
存储类型使用 storage 或 tier Storage 配置属性在自定义资源中指定:
存储配置类型:-
type: ephemeral -
Type: persistent-claimfor persistent storage using Persistent Volume Claims (PVC) -
type: jbod用于 JBOD 存储
-
layeredStorage配置类型:-
类型:用于自定义分层存储的自定义
-
对于存储在磁盘上的 Kafka 和 ZooKeeper 数据,存储的文件系统格式必须是 XFS 或 EXT4。如果基础架构支持,可以增加现有 Kafka 集群使用的磁盘容量。
7.3.2. 监听器 复制链接链接已复制到粘贴板!
侦听器配置客户端如何连接到 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 进行基于令牌的身份验证,您可以将监听程序配置为使用授权服务器。
7.3.3. 机架感知 复制链接链接已复制到粘贴板!
机架代表数据中心,或数据中心中的机架,或可用性区域。配置机架感知,以在机架之间分发 Kafka 代理 pod 和主题副本。使用 rack 属性启用机架感知,以指定 topologyKey。topologyKey 是分配给 OpenShift worker 节点的标签的名称,用于标识机架。Apache Kafka 的流会为每个 Kafka 代理分配一个机架 ID。Kafka 代理使用 ID 在机架间分布分区副本。您还可以指定 RackAwareReplicaSelector 选择器插件,以用于机架感知。该插件与代理和消费者的机架 ID 匹配,以便消息从最接近的副本消耗。要使用插件,消费者还必须启用机架感知。您可以在 Kafka Connect、M MirrorMaker 2 和 Kafka Bridge 中启用机架感知。
7.3.4. 显示 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
# ...