6.2. 部署 Kafka Connect


Kafka Connect 是一个在 Apache Kafka 和外部系统之间传输数据的工具。

在 AMQ Streams 中,Kafka Connect 以分布式模式部署。Kafka Connect 也可以在独立模式下工作,但AMQ Streams 不支持它。

使用 连接器 的概念,Kafka Connect 提供了一个框架,可将大量数据移入和移出 Kafka 集群,同时保持可伸缩性和可靠性。

Kafka Connect 通常用于将 Kafka 与外部数据库和存储及消息传递系统集成。

Cluster Operator 管理使用 KafkaConnector 资源部署的 Kafka Connect 集群,以及利用 KafkaConnector 资源创建的连接器。

以下流程描述了如何部署 Kafka Connect 并为流传输数据设置连接器:

注意

术语 连接器 可互换使用,表示在 Kafka Connect 集群或连接器类中运行的连接器实例。在本指南中,当从上下文中明确的含义时,会使用 连接器

6.2.1. 部署 Kafka 连接到 OpenShift 集群

此流程演示了如何使用 Cluster Operator 将 Kafka Connect 集群部署到 OpenShift 集群。

Kafka Connect 集群作为 Deployment 实施,它带有可配置的节点(也称为 worker),将连接器的工作负载作为 任务 分发,以便消息流高度可扩展和可靠性。

部署使用 YAML 文件来提供规格来创建 KafkaConnect 资源。

AMQ Streams 提供示例配置文件。在此过程中,我们使用以下示例文件:

  • examples/connect/kafka-connect.yaml

流程

  1. 将 Kafka 连接到您的 OpenShift 集群。使用 example /connect/kafka-connect.yaml 文件部署 Kafka Connect。

    oc apply -f examples/connect/kafka-connect.yaml
    Copy to Clipboard Toggle word wrap
  2. 检查部署的状态:

    oc get deployments -n <my_cluster_operator_namespace>
    Copy to Clipboard Toggle word wrap

    输出显示了部署名称和就绪状态

    NAME                        READY  UP-TO-DATE  AVAILABLE
    my-connect-cluster-connect  1/1    1           1
    Copy to Clipboard Toggle word wrap

    my-connect-cluster 是 Kafka Connect 集群的名称。

    READY 显示 ready/expected 的副本数量。当 AVAILABLE 输出显示为 1 时,部署成功。

6.2.2. 多个实例的 Kafka 连接配置

如果您运行多个 Kafka Connect 实例,您必须更改以下配置属性 的默认配置

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
  name: my-connect
spec:
  # ...
  config:
    group.id: connect-cluster 
1

    offset.storage.topic: connect-cluster-offsets 
2

    config.storage.topic: connect-cluster-configs 
3

    status.storage.topic: connect-cluster-status  
4

    # ...
# ...
Copy to Clipboard Toggle word wrap
1
Kafka 中的 Kafka Connect 集群 ID。
2
存储连接器偏移的 Kafka 主题。
3
存储连接器和任务状态配置的 Kafka 主题。
4
存储连接器和任务状态更新的 Kafka 主题。
注意

这三个主题的值对于具有相同 组.id 的所有 Kafka 连接实例必须相同。

除非更改默认设置,否则每个 Kafka 连接实例都使用相同的值部署连接到同一 Kafka 集群。这是因为所有实例都联合在集群中运行,并使用相同的主题。

如果多个 Kafka Connect 集群尝试使用相同主题,则 Kafka Connect 将无法按预期工作,并生成错误。

如果要运行多个 Kafka Connect 实例,请更改每个实例的这些属性值。

6.2.3. 使用连接器插件扩展 Kafka 连接

Kafka Connect 使用连接器实例来与其他系统集成以流传输数据。连接器可以是以下类型之一:

  • 将数据推送到 Kafka 的源连接器
  • 从 Kafka 中提取数据的接收器连接器

本节中的步骤描述了如何通过以下方法添加连接器:

重要

您可以使用 Kafka Connect REST API 或 KafkaConnector 自定义资源 直接为连接器创建配置。

您可以使用自己的连接器,或尝试示例 FileStreamSourceConnectorFileStreamSinkConnector 连接器,以便将基于文件的数据移入和移出 Kafka 集群。有关将示例文件连接器部署为 KafkaConnector 资源的详情,请参考 第 6.2.4.2 节 “部署 KafkaConnector 资源示例”

注意

在 Apache Kafka 3.1.0 之前,AMQ Streams 容器镜像用于 Kafka Connect,包括示例文件连接器。从 Apache Kafka 3.1.1 和 3.2.0,这些连接器将不再包含,且必须像任何连接器一样部署。

6.2.3.1. 使用 AMQ Streams 自动创建新容器镜像

此流程演示了如何配置 Kafka Connect,以便 AMQ Streams 会自动构建带有额外连接器的新容器镜像。您可以使用 KafkaConnect 自定义资源的 .spec.build.plugins 属性来定义连接器插件。AMQ Streams 将自动下载并添加到新容器镜像中。容器被推送到 .spec.build.output 中指定的容器仓库,并在 Kafka Connect 部署中自动使用。

先决条件

您需要提供自己的容器 registry,以便镜像可以推送到、存储和拉取(pull)镜像。AMQ Streams 支持私有容器 registry 和公共 registry,如 QuayDocker Hub

流程

  1. 通过在 .spec.build.output 中指定容器 registry 和 .spec. build.plugins 中的其他连接器来配置 KafkaConnect 自定义资源:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnect
    metadata:
      name: my-connect-cluster
    spec: 
    1
    
      #...
      build:
        output: 
    2
    
          type: docker
          image: my-registry.io/my-org/my-connect-cluster:latest
          pushSecret: my-registry-credentials
        plugins: 
    3
    
          - name: debezium-postgres-connector
            artifacts:
              - type: tgz
                url: https://repo1.maven.org/maven2/io/debezium/debezium-connector-postgres/1.3.1.Final/debezium-connector-postgres-1.3.1.Final-plugin.tar.gz
                sha512sum: 962a12151bdf9a5a30627eebac739955a4fd95a08d373b86bdcea2b4d0c27dd6e1edd5cb548045e115e33a9e69b1b2a352bee24df035a0447cb820077af00c03
          - name: camel-telegram
            artifacts:
              - type: tgz
                url: https://repo.maven.apache.org/maven2/org/apache/camel/kafkaconnector/camel-telegram-kafka-connector/0.7.0/camel-telegram-kafka-connector-0.7.0-package.tar.gz
                sha512sum: a9b1ac63e3284bea7836d7d24d84208c49cdf5600070e6bd1535de654f6920b74ad950d51733e8020bf4187870699819f54ef5859c7846ee4081507f48873479
      #...
    Copy to Clipboard Toggle word wrap
    1
    2
    (必需)推送新镜像的容器注册表的配置。
    3
    (必需)连接器插件列表及其要添加到新容器镜像的工件。每个插件必须至少配置一个 工件
  2. 创建或更新资源:

    $ oc apply -f KAFKA-CONNECT-CONFIG-FILE
    Copy to Clipboard Toggle word wrap
  3. 等待新容器镜像构建,然后部署 Kafka Connect 集群。
  4. 使用 Kafka Connect REST API 或 KafkaConnector 自定义资源使用您添加的连接器插件。

6.2.3.2. 从 Kafka Connect 基础镜像创建 Docker 镜像

此流程演示了如何创建自定义镜像并将其添加到 /opt/kafka/plugins 目录中。

您可以使用 红帽生态系统目录 上的 Kafka 容器镜像作为基础镜像,通过其他连接器插件创建您自己的自定义镜像。

在启动时,Kafka Connect 的 AMQ Streams 版本加载 /opt/kafka/plugins 目录中包含的任何第三方连接器插件。

流程

  1. 使用 registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2 作为基础镜像,创建一个新的 Dockerfile

    FROM registry.redhat.io/amq7/amq-streams-kafka-32-rhel8:2.2.2
    USER root:root
    COPY ./my-plugins/ /opt/kafka/plugins/
    USER 1001
    Copy to Clipboard Toggle word wrap

    插件文件示例

    $ tree ./my-plugins/
    ./my-plugins/
    ├── debezium-connector-mongodb
    │   ├── bson-3.4.2.jar
    │   ├── CHANGELOG.md
    │   ├── CONTRIBUTE.md
    │   ├── COPYRIGHT.txt
    │   ├── debezium-connector-mongodb-0.7.1.jar
    │   ├── debezium-core-0.7.1.jar
    │   ├── LICENSE.txt
    │   ├── mongodb-driver-3.4.2.jar
    │   ├── mongodb-driver-core-3.4.2.jar
    │   └── README.md
    ├── debezium-connector-mysql
    │   ├── CHANGELOG.md
    │   ├── CONTRIBUTE.md
    │   ├── COPYRIGHT.txt
    │   ├── debezium-connector-mysql-0.7.1.jar
    │   ├── debezium-core-0.7.1.jar
    │   ├── LICENSE.txt
    │   ├── mysql-binlog-connector-java-0.13.0.jar
    │   ├── mysql-connector-java-5.1.40.jar
    │   ├── README.md
    │   └── wkb-1.0.2.jar
    └── debezium-connector-postgres
        ├── CHANGELOG.md
        ├── CONTRIBUTE.md
        ├── COPYRIGHT.txt
        ├── debezium-connector-postgres-0.7.1.jar
        ├── debezium-core-0.7.1.jar
        ├── LICENSE.txt
        ├── postgresql-42.0.0.jar
        ├── protobuf-java-2.6.1.jar
        └── README.md
    Copy to Clipboard Toggle word wrap

    注意

    这个示例为 MongoDB、MySQL 和 PostgreSQL 使用 Debezium 连接器。在 Kafka Connect 中运行的 Debezium 与任何其他 Kafka Connect 任务相同。

  2. 构建容器镜像。
  3. 将自定义镜像推送到容器 registry。
  4. 指向新的容器镜像。

    您可以:

    • 编辑 KafkaConnect 自定义资源的 KafkaConnect.spec.image 属性。

      如果设置,此属性会覆盖 Cluster Operator 中的 STRIMZI_KAFKA_CONNECT_IMAGES 变量。

      apiVersion: kafka.strimzi.io/v1beta2
      kind: KafkaConnect
      metadata:
        name: my-connect-cluster
      spec: 
      1
      
        #...
        image: my-new-container-image 
      2
      
        config: 
      3
      
          #...
      Copy to Clipboard Toggle word wrap
      1
      2
      pod 的 docker 镜像。
      3
      配置 Kafka Connect worker (而非连接器)。

      或者

    • install/cluster-operator/060-Deployment-strimzi-cluster-operator.yaml 文件中,编辑 STRIMZI_KAFKA_CONNECT_IMAGES 变量以指向新容器镜像,然后重新安装 Cluster Operator。

6.2.4. 创建和管理连接器

当您为连接器插件创建容器镜像时,您需要在 Kafka Connect 集群中创建一个连接器实例。然后,您可以配置、监控和管理正在运行的连接器实例。

连接器是特定 连接器类 的实例,知道如何在消息中与相关外部系统通信。连接器适用于许多外部系统,也可以自行创建。

您可以创建 源和 接收器连接 器类型。

源连接器
源连接器是一个运行时实体,用于从外部系统获取数据并将其作为消息传送给 Kafka。
sink 连接器
sink 连接器是一个运行时实体,用于从 Kafka 主题获取信息并将其传送到外部系统。

6.2.4.1. 用于创建和管理连接器的 API

AMQ Streams 提供两个 API 用于创建和管理连接器:

  • KafkaConnector 自定义资源(称为 KafkaConnectors)
  • Kafka Connect REST API

使用 API,您可以:

  • 检查连接器实例的状态
  • 重新配置正在运行的连接器
  • 为连接器实例增加或减少连接器任务数量
  • 重启连接器
  • 重启连接器任务,包括失败的任务
  • 暂停连接器实例
  • 恢复之前暂停的连接器实例
  • 删除连接器实例

KafkaConnector 自定义资源

KafkaConnectors 允许您以 OpenShift 原生的方式创建和管理 Kafka Connect 的连接器实例,因此不需要 HTTP 客户端,如 cURL。与其他 Kafka 资源一样,您可以在部署到 OpenShift 集群的 KafkaConnector YAML 文件中声明一个连接器所需的状态,以创建连接器实例。KafkaConnector 资源必须部署到它们所链接的 Kafka Connect 集群相同的命名空间中。

您可以通过更新对应的 KafkaConnector 资源来管理正在运行的连接器实例,然后应用更新。您可以通过删除其对应的 KafkaConnector 来删除连接器。

为确保与 AMQ Streams 早期版本的兼容性,KafkaConnectors 会被默认禁用。要为 Kafka Connect 集群启用 KafkaConnectors,您可以在 KafkaConnect 资源中将 strimzi.io/use-connector-resources 注解设置为 true。具体步骤请参阅 配置 Kafka 连接

当启用 KafkaConnectors 时,Cluster Operator 会开始监视它们。它更新正在运行的连接器实例的配置,以匹配其 KafkaConnectors 中定义的配置。

AMQ Streams 提供了一个 KafkaConnector 配置文件示例,您可以使用它 创建和管理 FileStreamSourceConnectorFileStreamSinkConnector

注意

您可以通过 注解 KafkaConnector 资源 来重启连接器任务

Kafka Connect API

Kafka Connect REST API 支持的操作在 Apache Kafka Connect API 文档中 描述。

使用 Kafka Connect API 从 Kafka Connect API 切换到使用 KafkaConnectors

您可以使用 Kafka Connect API 从 使用 Kafka Connect API 来管理您的连接器。要进行切换,请按所示的顺序进行以下操作:

  1. 使用配置部署 KafkaConnector 资源,以创建您的连接器实例。
  2. 通过将 strimzi.io/use-connector-resources 注解设置为 true,在 Kafka Connect 配置中启用 KafkaConnectors。
警告

如果您在创建资源前启用 KafkaConnectors,您将删除所有连接器。

要使用 Kafka Connectors 从 Kafka Connect API 切换到,首先删除在 Kafka Connect 配置中启用 KafkaConnectors 的注解。否则,Cluster Operator 会恢复使用 Kafka Connect REST API 进行的手动更改。

6.2.4.2. 部署 KafkaConnector 资源示例

KafkaConnector 资源提供了一个 Kubernetes 原生的方法来管理 Cluster Operator 连接器。AMQ Streams 提供示例配置文件。在此过程中,我们使用 example /connect/source-connector.yaml 文件创建以下连接器实例作为 KafkaConnector 资源:

  • 一个 FileStreamSourceConnector 实例,从 Kafka 许可证文件(源)读取每行,并将数据作为信息写入单个 Kafka 主题。
  • 一个 FileStreamSinkConnector 实例,从 Kafka 主题读取信息并将信息写入临时文件(sink)。

另外,您可以使用 example /connect/kafka-connect-build.yaml 文件使用文件连接器构建新的 Kafka Connect 镜像。

在 Apache Kafka 3.1.0 之前,Apache Kafka 中包含示例文件连接器插件。从 Apache Kafka 的 3.1.1 和 3.2.0 版本开始,需要将示例作为任何其他连接器添加到插件路径中。如需了解更多详细信息,请参阅使用连接器插件扩展 Kafka 连接

注意

在生产环境中,您可以使用所需的 Kafka 连接连接器准备容器镜像,如 第 6.2.3 节 “使用连接器插件扩展 Kafka 连接” 所述。

FileStreamSourceConnectorFileStreamSinkConnector 作为示例提供。在容器内运行这些连接器,因为这里描述不太可能适合于生产用例。

先决条件

流程

  1. 编辑 example /connect/source-connector.yaml 文件:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      name: my-source-connector 
    1
    
      labels:
        strimzi.io/cluster: my-connect-cluster 
    2
    
    spec:
      class: org.apache.kafka.connect.file.FileStreamSourceConnector 
    3
    
      tasksMax: 2 
    4
    
      config: 
    5
    
        file: "/opt/kafka/LICENSE" 
    6
    
        topic: my-topic 
    7
    
        # ...
    Copy to Clipboard Toggle word wrap
    1
    KafkaConnector 资源的名称,用作连接器的名称。使用对 OpenShift 资源有效的任何名称。
    2
    在其中创建连接器实例的 Kafka Connect 集群的名称。连接器必须部署到它们所链接的 Kafka Connect 集群相同的命名空间中。
    3
    连接器类的完整名称或别名。这应该存在于 Kafka Connect 集群使用的镜像中。
    4
    连接器可创建的 Kafka 连接 任务 的最大数量。
    5
    连接器配置 作为键值对。
    6
    这个示例源连接器配置从 /opt/kafka/LICENSE 文件中读取数据。
    7
    将源数据发布到的 Kafka 主题。
  2. 在 OpenShift 集群中创建源 KafkaConnector

    oc apply -f examples/connect/source-connector.yaml
    Copy to Clipboard Toggle word wrap
  3. 创建 示例/连接/sink-connector.yaml 文件:

    touch examples/connect/sink-connector.yaml
    Copy to Clipboard Toggle word wrap
  4. 将以下 YAML 粘贴到 sink-connector.yaml 文件中:

    apiVersion: kafka.strimzi.io/v1beta2
    kind: KafkaConnector
    metadata:
      name: my-sink-connector
      labels:
        strimzi.io/cluster: my-connect
    spec:
      class: org.apache.kafka.connect.file.FileStreamSinkConnector 
    1
    
      tasksMax: 2
      config: 
    2
    
        file: "/tmp/my-file" 
    3
    
        topics: my-topic 
    4
    Copy to Clipboard Toggle word wrap
    1
    连接器类的完整名称或别名。这应该存在于 Kafka Connect 集群使用的镜像中。
    2
    连接器配置 作为键值对。
    3
    将源数据发布到的临时文件。
    4
    从中读取源数据的 Kafka 主题。
  5. 在 OpenShift 集群中创建 sink KafkaConnector

    oc apply -f examples/connect/sink-connector.yaml
    Copy to Clipboard Toggle word wrap
  6. 检查是否创建了连接器资源:

    oc get kctr --selector strimzi.io/cluster=MY-CONNECT-CLUSTER -o name
    
    my-source-connector
    my-sink-connector
    Copy to Clipboard Toggle word wrap

    MY-CONNECT-CLUSTER 替换为您的 Kafka Connect 集群。

  7. 在容器中执行 kafka-console-consumer.sh 来读取源连接器写入主题的消息:

    oc exec MY-CLUSTER-kafka-0 -i -t -- bin/kafka-console-consumer.sh --bootstrap-server MY-CLUSTER-kafka-bootstrap.NAMESPACE.svc:9092 --topic my-topic --from-beginning
    Copy to Clipboard Toggle word wrap
源和接收器连接器配置选项

连接器配置在 KafkaConnector 资源的 spec.config 属性中定义。

FileStreamSourceConnectorFileStreamSinkConnector 类支持与 Kafka Connect REST API 相同的配置选项。其他连接器支持不同的配置选项。

Expand
表 6.1. FileStreamSource connector 类的配置选项
名称类型默认值Description

file

字符串

null

源文件,以便将消息写入到.如果没有指定,则使用标准输入。

topic

list

null

将数据发布至的 Kafka 主题。

Expand
表 6.2. FileStreamSinkConnector 类的配置选项
名称类型默认值Description

file

字符串

null

要写入消息的目标文件。如果未指定,则使用标准输出。

主题

list

null

从中读取数据的一个或多个 Kafka 主题。

topics.regex

字符串

null

与一个或多个 Kafka 主题匹配的正则表达式来读取数据。

6.2.4.3. 执行 Kafka 连接器重启

此流程描述了如何使用 OpenShift 注解手动触发 Kafka 连接器重启。

先决条件

  • Cluster Operator 正在运行。

流程

  1. 查找控制您要重启的 Kafka 连接器的 KafkaConnector 自定义资源的名称:

    oc get KafkaConnector
    Copy to Clipboard Toggle word wrap
  2. 要重启连接器,请在 OpenShift 中注解 KafkaConnector 资源。例如,使用 oc annotate:

    oc annotate KafkaConnector KAFKACONNECTOR-NAME strimzi.io/restart=true
    Copy to Clipboard Toggle word wrap
  3. 等待下一次协调发生(默认为两分钟)。

    只要协调过程检测到注解,则 Kafka 连接器会被重启。当 Kafka Connect 接受重启请求时,注解会从 KafkaConnector 自定义资源中删除。

6.2.4.4. 执行 Kafka 连接器任务重启

此流程描述了如何使用 OpenShift 注解手动触发 Kafka 连接器任务重启。

先决条件

  • Cluster Operator 正在运行。

流程

  1. 查找控制您要重启的 Kafka 连接器任务的 KafkaConnector 自定义资源的名称:

    oc get KafkaConnector
    Copy to Clipboard Toggle word wrap
  2. 查找要从 KafkaConnector 自定义资源重启的任务 ID。任务 ID 是非负的整数,从 0 开始。

    oc describe KafkaConnector KAFKACONNECTOR-NAME
    Copy to Clipboard Toggle word wrap
  3. 要重启 connector 任务,请在 OpenShift 中注解 KafkaConnector 资源。例如,使用 oc annotate 重启任务 0:

    oc annotate KafkaConnector KAFKACONNECTOR-NAME strimzi.io/restart-task=0
    Copy to Clipboard Toggle word wrap
  4. 等待下一次协调发生(默认为两分钟)。

    只要协调过程检测到注解,则 Kafka 连接器任务会被重启。当 Kafka Connect 接受重启请求时,注解会从 KafkaConnector 自定义资源中删除。

6.2.4.5. 公开 Kafka Connect API

使用 Kafka Connect REST API 作为使用 KafkaConnector 资源管理连接器的替代选择。Kafka Connect REST API 作为一个运行在 <connect_cluster_name>-connect-api:8083 的服务其中 <connect_cluster_name> 是 Kafka Connect 集群的名称。服务在创建 Kafka Connect 实例时创建。

注意

strimzi.io/use-connector-resources 注解可启用 KafkaConnectors。如果您将注解应用到 KafkaConnect 资源配置,则需要将其删除以使用 Kafka Connect API。否则,Cluster Operator 会恢复使用 Kafka Connect REST API 进行的手动更改。

您可以将连接器配置添加为 JSON 对象。

添加连接器配置的 curl 请求示例

curl -X POST \
  http://my-connect-cluster-connect-api:8083/connectors \
  -H 'Content-Type: application/json' \
  -d '{ "name": "my-source-connector",
    "config":
    {
      "connector.class":"org.apache.kafka.connect.file.FileStreamSourceConnector",
      "file": "/opt/kafka/LICENSE",
      "topic":"my-topic",
      "tasksMax": "4",
      "type": "source"
    }
}'
Copy to Clipboard Toggle word wrap

API 只能在 OpenShift 集群内访问。如果要让 Kafka Connect API 可以被 OpenShift 集群外运行的应用程序访问,您可以通过创建以下功能来手动公开:

  • LoadBalancerNodePort 类型服务
  • Ingress 资源
  • OpenShift 路由
注意

连接是不安全的,因此建议进行外部访问。

如果您决定创建服务,请使用 < connect_cluster_name> -connect-api 服务 选择器的 标签来配置服务要路由流量的 pod:

服务的选择器配置

# ...
selector:
  strimzi.io/cluster: my-connect-cluster 
1

  strimzi.io/kind: KafkaConnect
  strimzi.io/name: my-connect-cluster-connect 
2

#...
Copy to Clipboard Toggle word wrap

1
OpenShift 集群中的 Kafka Connect 自定义资源的名称。
2
Cluster Operator 创建的 Kafka Connect 部署的名称。

您还必须创建一个允许来自外部客户端的 HTTP 请求的 NetworkPolicy

允许请求 Kafka Connect API 的 NetworkPolicy 示例

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: my-custom-connect-network-policy
spec:
  ingress:
  - from:
    - podSelector: 
1

        matchLabels:
          app: my-connector-manager
    ports:
    - port: 8083
      protocol: TCP
  podSelector:
    matchLabels:
      strimzi.io/cluster: my-connect-cluster
      strimzi.io/kind: KafkaConnect
      strimzi.io/name: my-connect-cluster-connect
  policyTypes:
  - Ingress
Copy to Clipboard Toggle word wrap

1
允许连接到 API 的 pod 标签。

要在集群外部添加连接器配置,请使用 curl 命令中公开 API 的资源的 URL。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat