Skip to main content

Create a cluster link

POST 

/kafka/v3/clusters/:cluster_id/links

Generally Available

Cluster link creation requires source cluster security configurations in the configs JSON section of the data request payload.

Request

Responses

Operation succeeded, no content in the response

OpenAPI definition (YAML)
paths:
  /kafka/v3/clusters/{cluster_id}/links:
    post:
      operationId: createKafkaLink
      description: '[![Generally Available](https://img.shields.io/badge/Lifecycle%20Stage-Generally%20Available-%2345c6e8)](#section/Versioning/API-Lifecycle-Policy)


        Cluster link creation requires source cluster security configurations in

        the configs JSON section of the data request payload.'
      tags:
      - Cluster Linking (v3)
      security:
      - resource-api-key: []
      - external-access-token: []
      parameters:
      - name: link_name
        description: The link name
        in: query
        required: true
        schema:
          type: string
        example: link-sb1
      - name: validate_only
        description: 'To validate the action can be performed successfully or not. Default: false'
        in: query
        required: false
        schema:
          type: boolean
        example: false
      - name: validate_link
        description: 'To synchronously validate that the source cluster ID is expected and the dest cluster
          has the permission to read topics in the source cluster. Default: true'
        in: query
        required: false
        schema:
          type: boolean
        example: false
      - name: cluster_id
        description: The Kafka cluster ID.
        in: path
        required: true
        schema:
          type: string
        example: cluster-1
      requestBody:
        description: Create a cluster link
        content:
          application/json:
            schema:
              properties:
                source_cluster_id:
                  type: string
                destination_cluster_id:
                  type: string
                remote_cluster_id:
                  description: The expected remote cluster ID.
                  type: string
                cluster_link_id:
                  description: The expected cluster link ID. Can be provided when creating the second
                    side of a bidirectional link for validating the link ID is as expected. If it's not
                    provided, it's inferred from the remote cluster.
                  type: string
                configs:
                  items:
                    example:
                      name: name
                      value: value
                    properties:
                      name:
                        type: string
                      value:
                        nullable: true
                        type: string
                    required:
                    - name
                    - value
                    title: ConfigData
                  type: array
              type: object
              title: CreateLinkRequestData
            examples:
              destination_initiated_link:
                description: Create a destination initiated cluster link
                value:
                  source_cluster_id: cluster-1
                  configs:
                  - name: bootstrap.servers
                    value: cluster-1-bootstrap-server
                  - name: acl.sync.enable
                    value: 'false'
                  - name: consumer.offset.sync.ms
                    value: '30000'
                  - name: sasl.mechanism
                    value: PLAIN
                  - name: security.protocol
                    value: SASL_SSL
                  - name: sasl.jaas.config
                    value: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
                      username='<Kafka API Key>' password='<Kafka API Secret>';
              source_initiated_link_at_source_cluster:
                description: Create a source initiated cluster link at source cluster
                value:
                  destination_cluster_id: cluster-2
                  configs:
                  - name: bootstrap.servers
                    value: cluster-2-bootstrap-server
                  - name: link.mode
                    value: SOURCE
                  - name: sasl.mechanism
                    value: PLAIN
                  - name: security.protocol
                    value: SASL_SSL
                  - name: sasl.jaas.config
                    value: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
                      username='<Remote Kafka API Key>' password='<Remote Kafka API Secret>';
                  - name: local.sasl.mechanism
                    value: PLAIN
                  - name: local.security.protocol
                    value: SASL_SSL
                  - name: local.sasl.jaas.config
                    value: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
                      username='<Local Kafka API Key>' password='<Local Kafka API Secret>';
              source_initiated_link_at_destination_cluster:
                description: Create a source initiated cluster link at destination cluster
                value:
                  destination_cluster_id: cluster-1
                  configs:
                  - name: link.mode
                    value: DESTINATION
                  - name: connection.mode
                    value: INBOUND
                  - name: acl.sync.enable
                    value: 'false'
              bidirectional_link_east:
                description: Create a bidirectional cluster link in east
                value:
                  remote_cluster_id: cluster-west
                  configs:
                  - name: bootstrap.servers
                    value: cluster-west-bootstrap-server
                  - name: link.mode
                    value: BIDIRECTIONAL
                  - name: cluster.link.prefix
                    value: west.
                  - name: sasl.mechanism
                    value: PLAIN
                  - name: security.protocol
                    value: SASL_SSL
                  - name: sasl.jaas.config
                    value: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
                      username='<Kafka API Key>' password='<Kafka API Secret>';
              bidirectional_link_west:
                description: Create a bidirectional cluster link in west
                value:
                  remote_cluster_id: cluster-east
                  cluster_link_id: eEBkTffYSESld6EO898x3w
                  configs:
                  - name: bootstrap.servers
                    value: cluster-east-bootstrap-server
                  - name: link.mode
                    value: BIDIRECTIONAL
                  - name: cluster.link.prefix
                    value: east.
                  - name: sasl.mechanism
                    value: PLAIN
                  - name: security.protocol
                    value: SASL_SSL
                  - name: sasl.jaas.config
                    value: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required
                      username='<Kafka API Key>' password='<Kafka API Secret>';
      responses:
        '204':
          description: Operation succeeded, no content in the response
        '400':
          description: Indicates a bad request error. It could be caused by an unexpected request body
            format or other forms of request validation failure.
          content:
            application/json:
              schema:
                type: object
                description: Describes a particular error encountered while performing an operation.
                properties:
                  id:
                    description: A unique identifier for this particular occurrence of the problem.
                    type: string
                    maxLength: 255
                  status:
                    description: The HTTP status code applicable to this problem, expressed as a string
                      value.
                    type: string
                  code:
                    description: An application-specific error code, expressed as a string value.
                    type: string
                  title:
                    description: A short, human-readable summary of the problem. It **SHOULD NOT** change
                      from occurrence to occurrence of the problem, except for purposes of localization.
                    type: string
                  detail:
                    description: A human-readable explanation specific to this occurrence of the problem.
                    type: string
                  source:
                    type: object
                    description: If this error was caused by a particular part of the API request, the
                      source will point to the query string parameter or request body property that caused
                      it.
                    properties:
                      pointer:
                        description: A JSON Pointer [RFC6901] to the associated entity in the request
                          document [e.g. "/spec" for a spec object, or "/spec/title" for a specific field].
                        type: string
                      parameter:
                        description: A string indicating which query parameter caused the error.
                        type: string
                  error_code:
                    type: integer
                    format: int32
                  message:
                    type: string
                    nullable: true
                additionalProperties: false
                title: Error
              examples:
                bad_request_cannot_deserialize:
                  description: Thrown when trying to deserialize an integer from non-integer data.
                  value:
                    error_code: 400
                    message: 'Cannot deserialize value of type `java.lang.Integer` from String "A": not
                      a valid `java.lang.Integer` value'
                unsupported_version_exception:
                  description: Thrown when the version of this API is not supported in the underlying
                    Kafka cluster.
                  value:
                    error_code: 40035
                    message: The version of this API is not supported in the underlying Kafka cluster.
        '401':
          description: Indicates a client authentication error. Kafka authentication failures will contain
            error code 40101 in the response body.
          content:
            application/json:
              schema:
                type: object
                description: Describes a particular error encountered while performing an operation.
                properties:
                  id:
                    description: A unique identifier for this particular occurrence of the problem.
                    type: string
                    maxLength: 255
                  status:
                    description: The HTTP status code applicable to this problem, expressed as a string
                      value.
                    type: string
                  code:
                    description: An application-specific error code, expressed as a string value.
                    type: string
                  title:
                    description: A short, human-readable summary of the problem. It **SHOULD NOT** change
                      from occurrence to occurrence of the problem, except for purposes of localization.
                    type: string
                  detail:
                    description: A human-readable explanation specific to this occurrence of the problem.
                    type: string
                  source:
                    type: object
                    description: If this error was caused by a particular part of the API request, the
                      source will point to the query string parameter or request body property that caused
                      it.
                    properties:
                      pointer:
                        description: A JSON Pointer [RFC6901] to the associated entity in the request
                          document [e.g. "/spec" for a spec object, or "/spec/title" for a specific field].
                        type: string
                      parameter:
                        description: A string indicating which query parameter caused the error.
                        type: string
                  error_code:
                    type: integer
                    format: int32
                  message:
                    type: string
                    nullable: true
                additionalProperties: false
                title: Error
              examples:
                kafka_authentication_failed:
                  description: Thrown when using Basic authentication with wrong Kafka credentials.
                  value:
                    error_code: 40101
                    message: Authentication failed
        '429':
          description: Indicates that a rate limit threshold has been reached, and the client should retry
            again later.
          content:
            text/html:
              schema:
                type: string
              example:
                description: A sample response from Jetty's DoSFilter.
                value: <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
                  <title>Error 429 Too Many Requests</title> </head> <body> <h2>HTTP ERROR 429 Too Many
                  Requests</h2> <table> <tr> <th>URI:</th> <td>/v3/clusters/my-cluster</td> </tr> <tr>
                  <th>STATUS:</th> <td>429</td> </tr> <tr> <th>MESSAGE:</th> <td>Too Many Requests</td>
                  </tr> <tr> <th>SERVLET:</th> <td>default</td> </tr> </table> </body> </html>
        5XX:
          description: A server-side problem that might not be addressable from the client side. Retriable
            Kafka errors will contain error code 50003 in the response body.
          content:
            application/json:
              schema:
                type: object
                description: Describes a particular error encountered while performing an operation.
                properties:
                  id:
                    description: A unique identifier for this particular occurrence of the problem.
                    type: string
                    maxLength: 255
                  status:
                    description: The HTTP status code applicable to this problem, expressed as a string
                      value.
                    type: string
                  code:
                    description: An application-specific error code, expressed as a string value.
                    type: string
                  title:
                    description: A short, human-readable summary of the problem. It **SHOULD NOT** change
                      from occurrence to occurrence of the problem, except for purposes of localization.
                    type: string
                  detail:
                    description: A human-readable explanation specific to this occurrence of the problem.
                    type: string
                  source:
                    type: object
                    description: If this error was caused by a particular part of the API request, the
                      source will point to the query string parameter or request body property that caused
                      it.
                    properties:
                      pointer:
                        description: A JSON Pointer [RFC6901] to the associated entity in the request
                          document [e.g. "/spec" for a spec object, or "/spec/title" for a specific field].
                        type: string
                      parameter:
                        description: A string indicating which query parameter caused the error.
                        type: string
                  error_code:
                    type: integer
                    format: int32
                  message:
                    type: string
                    nullable: true
                additionalProperties: false
                title: Error
              examples:
                generic_internal_server_error:
                  description: Thrown for generic HTTP 500 errors.
                  value:
                    error_code: 500
                    message: Internal Server Error
      servers:
      - url: https://pkc-00000.region.provider.confluent.cloud
        x-audience: business-unit-internal
        description: Confluent Cloud REST Endpoint. For example https://pkc-00000.region.provider.confluent.cloud
      jsonRequestBodyExample:
        source_cluster_id: string
        destination_cluster_id: string
        remote_cluster_id: string
        cluster_link_id: string
        configs:
        - name: name
          value: value