Apache Kafka Messaging API

The core Kafka messaging protocol for producing and consuming records to/from topics using the native Kafka binary protocol, supporting exactly-once semantics, compaction, and partitioned log storage.

AsyncAPI Specification

kafka-messaging.yml Raw ↑
asyncapi: 2.6.0
info:
  title: Apache Kafka Messaging API
  version: 3.7.0
  description: >-
    Apache Kafka is a distributed event streaming platform capable of handling
    trillions of events a day. This spec describes the core messaging protocol
    for producing and consuming records to/from Kafka topics.
  contact:
    name: Apache Kafka
    url: https://kafka.apache.org/
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0
servers:
  default:
    url: localhost:9092
    protocol: kafka
    description: Default Kafka bootstrap server
    protocolVersion: '3.7'
defaultContentType: application/json
channels:
  '{topic}':
    description: >-
      A Kafka topic is a category or feed name to which records are published.
      Topics are partitioned, and each partition is an ordered, immutable
      sequence of records that is continually appended to.
    parameters:
      topic:
        description: The topic name
        schema:
          type: string
    publish:
      operationId: produceRecord
      summary: Produce a record to a Kafka topic
      description: >-
        Producers publish records to topics. Each record consists of a key,
        a value, a timestamp, and optional headers. Records are appended
        to the partition determined by the partitioner.
      message:
        $ref: '#/components/messages/KafkaRecord'
      bindings:
        kafka:
          groupId:
            type: string
          clientId:
            type: string
    subscribe:
      operationId: consumeRecord
      summary: Consume records from a Kafka topic
      description: >-
        Consumers read records from topics by subscribing to one or more topics
        and processing the stream of records produced to them. Consumers belong
        to consumer groups for parallel processing.
      message:
        $ref: '#/components/messages/KafkaRecord'
      bindings:
        kafka:
          groupId:
            type: string
          clientId:
            type: string
components:
  messages:
    KafkaRecord:
      name: KafkaRecord
      title: Kafka Record
      summary: A record (message) in a Kafka topic
      contentType: application/json
      headers:
        type: object
        properties:
          kafka_offset:
            type: integer
            description: The offset of the record in the partition
          kafka_partition:
            type: integer
            description: The partition the record belongs to
          kafka_timestamp:
            type: integer
            description: The timestamp of the record (CreateTime or LogAppendTime)
          kafka_timestampType:
            type: string
            enum: [CREATE_TIME, LOG_APPEND_TIME]
        additionalProperties:
          type: string
          description: Custom headers as key-value string pairs
      payload:
        type: object
        properties:
          key:
            description: The record key used for partitioning
          value:
            description: The record value (the message payload)
          timestamp:
            type: integer
            description: Unix timestamp in milliseconds
          headers:
            type: object
            additionalProperties:
              type: string
      bindings:
        kafka:
          key:
            type: string
            description: Record key for partitioning
  schemas:
    KafkaRecordKey:
      type: object
      description: A generic Kafka record key
    KafkaRecordValue:
      type: object
      description: A generic Kafka record value
    ConsumerGroupMetadata:
      type: object
      properties:
        groupId:
          type: string
        generationId:
          type: integer
        memberId:
          type: string
        groupInstanceId:
          type: string