Full Code of IBM/sarama for AI

main 3a0f0a4c0c50 cached
339 files
2.1 MB
557.7k tokens
3569 symbols
1 requests
Download .txt
Showing preview only (2,230K chars total). Download the full file or copy to clipboard to get everything.
Repository: IBM/sarama
Branch: main
Commit: 3a0f0a4c0c50
Files: 339
Total size: 2.1 MB

Directory structure:
gitextract_pmrrr8_5/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── actions/
│   │   └── staticcheck-matchers.json
│   ├── dependabot.yml
│   ├── release.yaml
│   ├── renovate.json5
│   └── workflows/
│       ├── apidiff.yml
│       ├── cache-cleanup.yml
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       ├── dependency-review.yml
│       ├── fuzz.yml
│       ├── fvt-main.yml
│       ├── fvt-pr.yml
│       ├── fvt.yml
│       ├── i386.yml
│       ├── renovate-config.yml
│       ├── scorecard.yml
│       └── stale.yml
├── .gitignore
├── .golangci.yml
├── .pre-commit-config.yaml
├── .whitesource
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile.kafka
├── LICENSE.md
├── Makefile
├── README.md
├── SECURITY.md
├── Vagrantfile
├── acl_bindings.go
├── acl_create_request.go
├── acl_create_request_test.go
├── acl_create_response.go
├── acl_create_response_test.go
├── acl_delete_request.go
├── acl_delete_request_test.go
├── acl_delete_response.go
├── acl_delete_response_test.go
├── acl_describe_request.go
├── acl_describe_request_test.go
├── acl_describe_response.go
├── acl_describe_response_test.go
├── acl_filter.go
├── acl_types.go
├── acl_types_test.go
├── add_offsets_to_txn_request.go
├── add_offsets_to_txn_request_test.go
├── add_offsets_to_txn_response.go
├── add_offsets_to_txn_response_test.go
├── add_partitions_to_txn_request.go
├── add_partitions_to_txn_request_test.go
├── add_partitions_to_txn_response.go
├── add_partitions_to_txn_response_test.go
├── admin.go
├── admin_test.go
├── alter_client_quotas_request.go
├── alter_client_quotas_request_test.go
├── alter_client_quotas_response.go
├── alter_client_quotas_response_test.go
├── alter_configs_request.go
├── alter_configs_request_test.go
├── alter_configs_response.go
├── alter_configs_response_test.go
├── alter_partition_reassignments_request.go
├── alter_partition_reassignments_request_test.go
├── alter_partition_reassignments_response.go
├── alter_partition_reassignments_response_test.go
├── alter_user_scram_credentials_request.go
├── alter_user_scram_credentials_request_test.go
├── alter_user_scram_credentials_response.go
├── alter_user_scram_credentials_response_test.go
├── api_versions.go
├── api_versions_request.go
├── api_versions_request_test.go
├── api_versions_response.go
├── api_versions_response_test.go
├── api_versions_test.go
├── async_producer.go
├── async_producer_test.go
├── balance_strategy.go
├── balance_strategy_test.go
├── broker.go
├── broker_test.go
├── client.go
├── client_test.go
├── client_tls_test.go
├── compress.go
├── config.go
├── config_resource_type.go
├── config_test.go
├── consumer.go
├── consumer_group.go
├── consumer_group_example_test.go
├── consumer_group_members.go
├── consumer_group_members_test.go
├── consumer_group_test.go
├── consumer_metadata_request.go
├── consumer_metadata_request_test.go
├── consumer_metadata_response.go
├── consumer_metadata_response_test.go
├── consumer_test.go
├── control_record.go
├── control_record_test.go
├── crc32_field.go
├── create_partitions_request.go
├── create_partitions_request_test.go
├── create_partitions_response.go
├── create_partitions_response_test.go
├── create_topics_request.go
├── create_topics_request_test.go
├── create_topics_response.go
├── create_topics_response_test.go
├── decompress.go
├── delete_groups_request.go
├── delete_groups_request_test.go
├── delete_groups_response.go
├── delete_groups_response_test.go
├── delete_offsets_request.go
├── delete_offsets_request_test.go
├── delete_offsets_response.go
├── delete_offsets_response_test.go
├── delete_records_request.go
├── delete_records_request_test.go
├── delete_records_response.go
├── delete_records_response_test.go
├── delete_topics_request.go
├── delete_topics_request_test.go
├── delete_topics_response.go
├── delete_topics_response_test.go
├── describe_client_quotas_request.go
├── describe_client_quotas_request_test.go
├── describe_client_quotas_response.go
├── describe_client_quotas_response_test.go
├── describe_cluster_request.go
├── describe_cluster_request_test.go
├── describe_cluster_response.go
├── describe_cluster_response_test.go
├── describe_configs_request.go
├── describe_configs_request_test.go
├── describe_configs_response.go
├── describe_configs_response_test.go
├── describe_groups_request.go
├── describe_groups_request_test.go
├── describe_groups_response.go
├── describe_groups_response_test.go
├── describe_log_dirs_request.go
├── describe_log_dirs_request_test.go
├── describe_log_dirs_response.go
├── describe_log_dirs_response_test.go
├── describe_user_scram_credentials_request.go
├── describe_user_scram_credentials_request_test.go
├── describe_user_scram_credentials_response.go
├── describe_user_scram_credentials_response_test.go
├── dev.yml
├── docker-compose.yml
├── elect_leaders_request.go
├── elect_leaders_request_test.go
├── elect_leaders_response.go
├── elect_leaders_response_test.go
├── election_type.go
├── encoder_decoder.go
├── encoder_decoder_fuzz_test.go
├── end_txn_request.go
├── end_txn_request_test.go
├── end_txn_response.go
├── end_txn_response_test.go
├── entrypoint.sh
├── errors.go
├── errors_test.go
├── examples/
│   ├── README.md
│   ├── consumergroup/
│   │   ├── README.md
│   │   ├── go.mod
│   │   ├── go.sum
│   │   └── main.go
│   └── interceptors/
│       ├── README.md
│       ├── go.mod
│       ├── go.sum
│       ├── main.go
│       └── trace_interceptor.go
├── fetch_request.go
├── fetch_request_test.go
├── fetch_response.go
├── fetch_response_test.go
├── find_coordinator_request.go
├── find_coordinator_request_test.go
├── find_coordinator_response.go
├── find_coordinator_response_test.go
├── functional_admin_test.go
├── functional_client_test.go
├── functional_consumer_follower_fetch_test.go
├── functional_consumer_group_test.go
├── functional_consumer_staticmembership_test.go
├── functional_consumer_test.go
├── functional_java_interop_test.go
├── functional_offset_manager_test.go
├── functional_producer_test.go
├── functional_test.go
├── go.mod
├── go.sum
├── gssapi_kerberos.go
├── heartbeat_request.go
├── heartbeat_request_test.go
├── heartbeat_response.go
├── heartbeat_response_test.go
├── helpers_test.go
├── incremental_alter_configs_request.go
├── incremental_alter_configs_request_test.go
├── incremental_alter_configs_response.go
├── incremental_alter_configs_response_test.go
├── init_producer_id_request.go
├── init_producer_id_request_test.go
├── init_producer_id_response.go
├── init_producer_id_response_test.go
├── interceptors.go
├── internal/
│   └── toxiproxy/
│       ├── README.md
│       ├── client.go
│       ├── proxy.go
│       └── toxic.go
├── join_group_request.go
├── join_group_request_test.go
├── join_group_response.go
├── join_group_response_test.go
├── kerberos_client.go
├── kerberos_client_test.go
├── leave_group_request.go
├── leave_group_request_test.go
├── leave_group_response.go
├── leave_group_response_test.go
├── length_field.go
├── list_groups_request.go
├── list_groups_request_test.go
├── list_groups_response.go
├── list_groups_response_test.go
├── list_partition_reassignments_request.go
├── list_partition_reassignments_request_test.go
├── list_partition_reassignments_response.go
├── list_partition_reassignments_response_test.go
├── logger_test.go
├── message.go
├── message_set.go
├── message_test.go
├── metadata.go
├── metadata_request.go
├── metadata_request_test.go
├── metadata_response.go
├── metadata_response_test.go
├── metadata_test.go
├── metrics.go
├── metrics_helpers_test.go
├── metrics_test.go
├── mockbroker.go
├── mockkerberos.go
├── mockresponses.go
├── mocks/
│   ├── README.md
│   ├── async_producer.go
│   ├── async_producer_test.go
│   ├── consumer.go
│   ├── consumer_test.go
│   ├── mocks.go
│   ├── sync_producer.go
│   └── sync_producer_test.go
├── offset_commit_request.go
├── offset_commit_request_test.go
├── offset_commit_response.go
├── offset_commit_response_test.go
├── offset_fetch_request.go
├── offset_fetch_request_test.go
├── offset_fetch_response.go
├── offset_fetch_response_test.go
├── offset_manager.go
├── offset_manager_test.go
├── offset_request.go
├── offset_request_test.go
├── offset_response.go
├── offset_response_test.go
├── packet_decoder.go
├── packet_encoder.go
├── partitioner.go
├── partitioner_test.go
├── prep_encoder.go
├── produce_request.go
├── produce_request_test.go
├── produce_response.go
├── produce_response_test.go
├── produce_set.go
├── produce_set_test.go
├── quota_types.go
├── real_decoder.go
├── real_decoder_test.go
├── real_encoder.go
├── record.go
├── record_batch.go
├── record_test.go
├── records.go
├── records_test.go
├── request.go
├── request_test.go
├── response_header.go
├── response_header_test.go
├── sarama.go
├── sarama_test.go
├── sasl_authenticate_request.go
├── sasl_authenticate_request_test.go
├── sasl_authenticate_response.go
├── sasl_authenticate_response_test.go
├── sasl_handshake_request.go
├── sasl_handshake_request_test.go
├── sasl_handshake_response.go
├── sasl_handshake_response_test.go
├── scram_formatter.go
├── scram_formatter_test.go
├── server.properties
├── sticky_assignor_user_data.go
├── sticky_assignor_user_data_test.go
├── sync_group_request.go
├── sync_group_request_test.go
├── sync_group_response.go
├── sync_group_response_test.go
├── sync_producer.go
├── sync_producer_test.go
├── timestamp.go
├── tools/
│   ├── README.md
│   ├── kafka-producer-performance/
│   │   ├── README.md
│   │   └── main.go
│   └── tls/
│       └── config.go
├── transaction_manager.go
├── transaction_manager_test.go
├── txn_offset_commit_request.go
├── txn_offset_commit_request_test.go
├── txn_offset_commit_response.go
├── txn_offset_commit_response_test.go
├── utils.go
├── utils_test.go
├── version.go
├── zstd.go
└── zstd_test.go

================================================
FILE CONTENTS
================================================

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Report an issue that you've found
title: ""
labels: ""
assignees: ""
---

##### Description

<!-- A clear and concise description of what the bug is and how to reproduce it. -->

##### Versions

<!-- Please specify real version numbers or git SHAs, not just "Latest" since that changes fairly regularly. -->

| Sarama | Kafka | Go  |
| ------ | ----- | --- |
|        |       |     |

##### Configuration

<!-- What configuration values are you using for Sarama and Kafka? -->

```go

```

##### Logs

<!-- If applicable, add logs from Sarama and/or Kafka to help explain your problem.
You can set `sarama.Logger` to a `log.Logger` to capture Sarama debug output. -->

<details><summary>logs: CLICK ME</summary>
<p>

```

```

</p>
</details>

##### Additional Context

<!-- Add any other context about the problem here. -->


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ""
labels: ""
assignees: ""
---

#### Description

<!-- A clear and concise description of what the missing capability is, why it's a problem and what you want to happen -->

#### Additional context

<!-- Add any other context or links to existing implementations of the feature in other Kafka clients -->
<!-- Please link to the relevant KIP from https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Improvement+Proposals if appropriate -->


================================================
FILE: .github/actions/staticcheck-matchers.json
================================================
{
  "problemMatcher": [
    {
      "owner": "staticcheck",
      "pattern": [
        {
          "regexp": "^\\s*(.+\\.go):(?:(\\d+):(\\d+):)? (.*)",
          "file": 1,
          "line": 2,
          "column": 3,
          "message": 4
        }
      ]
    }
  ]
}


================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
  - package-ecosystem: docker
    directory: /
    schedule:
      interval: daily
      time: "21:00"
      timezone: "Etc/UTC"
    labels:
      - "ignore-for-release"
    commit-message:
      prefix: chore(ci)

  - package-ecosystem: github-actions
    directory: /
    open-pull-requests-limit: 2
    schedule:
      interval: weekly
    labels:
      - "ignore-for-release"
    commit-message:
      prefix: chore(ci)
    groups:
      actions:
        patterns:
          - "actions/*"

  - package-ecosystem: gomod
    directories:
      - /
      - /examples/consumergroup
      - /examples/exactly_once
      - /examples/http_server
      - /examples/sasl_scram_client
      - /examples/interceptors
      - /examples/txn_producer
    open-pull-requests-limit: 5
    schedule:
      interval: daily
      time: "15:00"
      timezone: "Etc/UTC"
    labels:
      - "dependencies"
    commit-message:
      prefix: chore
      include: "scope"
    groups:
      otel:
        patterns:
          - "go.opentelemetry.io/otel/*"
      golang-x:
        patterns:
          - "golang.org/x/*"
    ignore:
      - dependency-name: "go.opentelemetry.io/*"
        # ignore versions of otel that are equal to or greater than 1.30.0 as they require go1.22
        versions: [">=1.30.0"]


================================================
FILE: .github/release.yaml
================================================
changelog:
  exclude:
    labels:
    - ignore-for-release
    - invalid
    - no-changelog
    - skip-changelog
  categories:
  - title: ":rotating_light: Breaking Changes"
    labels:
    - breaking
  - title: ":tada: New Features / Improvements"
    labels:
    - enhancement
    - feature
    - feat
  - title: ":bug: Fixes"
    labels:
    - bug
    - bugfix
    - fix
    - regression
  - title: ":package: Dependency updates"
    labels:
    - dependencies
    - deps
  - title: ":wrench: Maintenance"
    labels:
    - build
    - chore
    - ci
    - housekeeping
    - internal
  - title: ":memo: Documentation"
    labels:
    - documentation
    - docs
  - title: ":heavy_plus_sign: Other Changes"
    labels:
    - "*"


================================================
FILE: .github/renovate.json5
================================================
{
  $schema: "https://docs.renovatebot.com/renovate-schema.json",
  extends: [
    "config:best-practices",
    "customManagers:dockerfileVersions",
    "customManagers:githubActionsVersions",
    "customManagers:makefileVersions",
    "security:openssf-scorecard",
    ":gitSignOff",
  ],
  branchConcurrentLimit: 4,
  prConcurrentLimit: 4,
  prHourlyLimit: 4,
  branchPrefix: "mend/",
  labels: ["dependencies"],
  timezone: "Etc/UTC",
  major: {
    addLabels: ["bump/major"],
  },
  minor: {
    addLabels: ["bump/minor"],
  },
  patch: {
    addLabels: ["bump/patch"],
  },
  pin: {
    addLabels: ["bump/pin"],
  },
  digest: {
    addLabels: ["bump/digest"],
  },
  vulnerabilityAlerts: {
    enabled: true,
    labels: ["security"],
  },
  packageRules: [
    {
      description: "Update Docker and Docker Compose dependencies daily at 9:00 PM UTC, grouped into a single PR",
      matchManagers: ["dockerfile", "docker-compose"],
      schedule: ["* 21 * * *"],
      commitMessagePrefix: "chore(ci): ",
      groupName: "docker dependencies",
      addLabels: ["docker", "ignore-for-release"],
    },
    {
      description: "Update GitHub Actions weekly, grouped into a single PR for actions/* packages",
      matchManagers: ["github-actions"],
      schedule: ["* 0 * * 0"],
      commitMessagePrefix: "chore(ci): ",
      groupName: "actions",
      matchPackageNames: ["actions/*", "github/codeql-action"],
      prConcurrentLimit: 2,
      addLabels: ["github-actions", "ignore-for-release"],
    },
    {
      description: "Update Go modules daily at 3:00 PM UTC",
      matchManagers: ["gomod"],
      matchFileNames: ["/**"],
      schedule: ["* 15 * * *"],
    },
    {
      description: "Group OpenTelemetry Go dependencies into a single PR",
      matchManagers: ["gomod"],
      groupName: "otel",
      matchPackageNames: [
        "go.opentelemetry.io/otel",
        "go.opentelemetry.io/otel/*",
      ],
    },
    {
      description: "Group golang.org/x Go dependencies into a single PR",
      matchManagers: ["gomod"],
      groupName: "golang-x",
      matchDepTypes: ["direct", "indirect"],
      enabled: true,
      matchPackageNames: ["golang.org/x/*"],
    },
    {
      description: "Pin ubi-minimal docker image to major.minor tags only",
      matchDatasources: ["docker"],
      matchPackageNames: ["registry.access.redhat.com/ubi9/ubi-minimal"],
      versioning: "regex:^(?<major>\\d+)\\.(?<minor>\\d+)$",
    },
    {
      description: "Pin zookeeper docker image to 3.7.x",
      matchDatasources: ["docker"],
      matchPackageNames: ["docker.io/library/zookeeper"],
      allowedVersions: "< 3.8",
    },
    {
      description: "Do not pin digests in docker-compose files",
      matchManagers: ["docker-compose"],
      pinDigests: false,
    },
  ],
}


================================================
FILE: .github/workflows/apidiff.yml
================================================
name: API Compatibility
on:
  merge_group:
  push:
    branches:
    - main
    paths-ignore:
    - '**/*.md'
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  apidiff:
    runs-on: ubuntu-latest
    if: github.base_ref
    steps:
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: stable
    - name: Add GOBIN to PATH
      run: echo "$(go env GOPATH)/bin" >>$GITHUB_PATH
    - name: Install apidiff cmd
      run: go install golang.org/x/exp/cmd/apidiff@v0.0.0-20250813145105-42675adae3e6
    - name: Checkout base code
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        ref: ${{ github.base_ref }}
        path: "base"
        persist-credentials: false
    - name: Capture apidiff baseline
      run: apidiff -m -w ../baseline.bin .
      working-directory: "base"
    - name: Checkout updated code
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        path: "updated"
        persist-credentials: false
    - name: Run apidiff check
      run: apidiff -m -incompatible ../baseline.bin .
      working-directory: "updated"


================================================
FILE: .github/workflows/cache-cleanup.yml
================================================
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries
name: Cleanup caches on PR close/merge
on:
  pull_request:
    types:
      - closed

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read # for actions/checkout to fetch code

jobs:
  cleanup:
    permissions:
      actions: write # for cache management
    runs-on: ubuntu-latest
    steps:
      - name: Delete Caches
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          GH_REPO: ${{ github.repository }}
          BRANCH: refs/pull/${{ github.event.pull_request.number }}/merge
        run: |
          gh cache list --ref "$BRANCH" --limit 100
          CACHE_KEYS="$(gh cache list --ref "$BRANCH" --limit 100 --json id --jq '.[].id')"
          for KEY in ${CACHE_KEYS}; do
            echo "Deleting cache $KEY for ref $BRANCH"
            gh cache delete "$KEY" || true
            echo
          done


================================================
FILE: .github/workflows/ci.yml
================================================
name: CI
on:
  merge_group:
  push:
    branches:
    - main
    paths-ignore:
    - '**/*.md'
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local
  # renovate: datasource=github-releases depName=golangci/golangci-lint
  GOLANGCI_LINT_VERSION: v2.11.3
  # renovate: datasource=github-releases depName=dominikh/go-tools
  STATICCHECK_VERSION: 2026.1
  # renovate: datasource=github-releases depName=mfridman/tparse
  TPARSE_VERSION: v0.18.0

jobs:
  lint:
    permissions:
      contents: read # for actions/checkout to fetch code
      pull-requests: read # for golangci/golangci-lint-action to fetch pull requests
    name: Linting with Go ${{ matrix.go-version }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        go-version: [stable]
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: ${{ matrix.go-version }}
    - name: Staticcheck
      shell: bash
      env:
        BUILDTAGS: "functional"
      run: |
        go install "honnef.co/go/tools/cmd/staticcheck@${STATICCHECK_VERSION}"
        echo "::add-matcher::./.github/actions/staticcheck-matchers.json"
        $(go env GOPATH)/bin/staticcheck -tags "${BUILDTAGS}" ./...
    - name: golangci-lint
      env:
        GOFLAGS: -tags=functional
      uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
      with:
        version: ${{ env.GOLANGCI_LINT_VERSION }}
  test:
    name: Unit Testing with Go ${{ matrix.go-version }}
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        go-version: [oldstable, stable]
    env:
      DEBUG: true
      GOFLAGS: -trimpath
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: ${{ matrix.go-version }}
    - name: Test (Unit)
      run: make test
    - name: Report Test Results
      if: always()
      run: |
        go run github.com/mfridman/tparse@${TPARSE_VERSION} -all -format markdown -file _test/unittests.json | tee -a $GITHUB_STEP_SUMMARY
    - name: Report Per Func Test Coverage
      if: always()
      run: |
        cat >>$GITHUB_STEP_SUMMARY <<EOF
        <details>
        <summary>Click for per-func code coverage</summary>

        |Filename|Function|Coverage|
        |--------|--------|--------|
        $(go tool cover -func=profile.out | sed -E -e 's/[[:space:]]+/|/g' -e 's/$/|/g' -e 's/^/|/g')
        </details>
        EOF


================================================
FILE: .github/workflows/codeql-analysis.yml
================================================
name: "CodeQL"
on:
  merge_group:
  push:
    branches:
    - main
  pull_request:
    branches:
    - "**"
  schedule:
  - cron: "39 12 * * 1"

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  analyze:
    name: Analyze
    runs-on: ubuntu-latest
    permissions:
      actions: read  # for github/codeql-action to list actions
      contents: read  # for actions/checkout to fetch code
      security-events: write  # for github/codeql-action to report security issues
    strategy:
      fail-fast: false
      matrix:
        language: ["actions", "go"]
    steps:
    - name: Checkout repository
      uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Initialize CodeQL
      uses: github/codeql-action/init@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5
      with:
        languages: ${{ matrix.language }}
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: stable
    - name: Autobuild
      uses: github/codeql-action/autobuild@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5
    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5


================================================
FILE: .github/workflows/dependency-review.yml
================================================
# Dependency Review Action
#
# This Action will scan dependency manifest files that change as part of a Pull Request,
# surfacing known-vulnerable versions of the packages declared or updated in the PR.
# Once installed, if the workflow run is marked as required,
# PRs introducing known-vulnerable packages will be blocked from merging.
#
# Source repository: https://github.com/actions/dependency-review-action
name: 'Dependency Review'
on:
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

jobs:
  dependency-review:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false
      - name: 'Dependency Review'
        uses: actions/dependency-review-action@05fe4576374b728f0c523d6a13d64c25081e0803 # v4.8.3


================================================
FILE: .github/workflows/fuzz.yml
================================================
name: Fuzzing
on:
  merge_group:
  push:
    branches:
    - main
    paths-ignore:
    - '**/*.md'
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  test:
    name: Fuzz
    runs-on: ubuntu-latest
    env:
      GOFLAGS: -trimpath
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: stable
    - name: Run any fuzzing tests
      run: go test -list . | grep '^Fuzz' | parallel 'go test -v -run=^{}$ -fuzz=^{}$ -fuzztime=5m'


================================================
FILE: .github/workflows/fvt-main.yml
================================================
name: FVT (main)
on:
  merge_group:
  push:
    branches:
    - main
    paths-ignore:
    - '**/*.md'

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  fvt:
    name: Test with Kafka ${{ matrix.kafka-version }}
    strategy:
      fail-fast: false
      matrix:
        go-version: [stable]
        kafka-version: [1.0.2, 2.0.1, 2.2.2, 2.6.3, 2.8.2, 3.0.2, 3.3.2, 3.6.2, 3.8.1, 3.9.2, 4.1.1, 4.2.0]
        include:
        - kafka-version: 1.0.2
          scala-version: 2.11
        - kafka-version: 2.0.1
          scala-version: 2.12
        - kafka-version: 2.2.2
          scala-version: 2.12
        - kafka-version: 2.6.3
          scala-version: 2.12
        - kafka-version: 2.8.2
          scala-version: 2.12
        - kafka-version: 3.0.2
          scala-version: 2.12
        - kafka-version: 3.3.2
          scala-version: 2.13
        - kafka-version: 3.6.2
          scala-version: 2.13
        - kafka-version: 3.8.1
          scala-version: 2.13
        - kafka-version: 3.9.2
          scala-version: 2.13
        - kafka-version: 4.1.1
          scala-version: 2.13
        - kafka-version: 4.2.0
          scala-version: 2.13
    uses: ./.github/workflows/fvt.yml
    with:
      go-version: ${{ matrix.go-version }}
      kafka-version: ${{ matrix.kafka-version }}
      scala-version: ${{ matrix.scala-version }}


================================================
FILE: .github/workflows/fvt-pr.yml
================================================
name: FVT (PR)
on:
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  fvt:
    name: Test with Kafka ${{ matrix.kafka-version }}
    strategy:
      fail-fast: false
      matrix:
        go-version: [stable]
        kafka-version: [1.0.2, 2.6.3, 3.6.2, 3.9.2, 4.1.1, 4.2.0]
        include:
        - kafka-version: 1.0.2
          scala-version: 2.11
        - kafka-version: 2.6.3
          scala-version: 2.12
        - kafka-version: 3.6.2
          scala-version: 2.13
        - kafka-version: 3.9.2
          scala-version: 2.13
        - kafka-version: 4.1.1
          scala-version: 2.13
        - kafka-version: 4.2.0
          scala-version: 2.13
    uses: ./.github/workflows/fvt.yml
    with:
      go-version: ${{ matrix.go-version }}
      kafka-version: ${{ matrix.kafka-version }}
      scala-version: ${{ matrix.scala-version }}


================================================
FILE: .github/workflows/fvt.yml
================================================
name: FVT
on:
  workflow_call:
    inputs:
      go-version:
        required: false
        type: string
        default: stable
      kafka-version:
        required: false
        type: string
        default: "3.9.1"
      scala-version:
        required: false
        type: string
        default: "2.13"

concurrency:
  group: ${{ github.workflow }}-kafka-${{ inputs.kafka-version}}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  fvt:
    name: Test with Kafka ${{ inputs.kafka-version }}
    runs-on: ubuntu-latest
    env:
      DEBUG: true
      GOFLAGS: -trimpath
      KAFKA_VERSION: ${{ inputs.kafka-version }}
      SCALA_VERSION: ${{ inputs.scala-version }}
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Setup Docker
      uses: docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f # v3.12.0
      id: buildx
    - name: Build FVT Docker Image
      uses: docker/bake-action@5be5f02ff8819ecd3092ea6b2e6261c31774f2b4 # v6.10.0
      with:
        builder: ${{ steps.buildx.outputs.name }}
        files: docker-compose.yml
        load: true
        targets: kafka-1
        set: |
          *.cache-from=type=gha,scope=fvt-kafka-${{ inputs.kafka-version }}
          *.cache-to=type=gha,scope=fvt-kafka-${{ inputs.kafka-version }},mode=max
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: ${{ inputs.go-version }}
    - name: Setup Docker Compose
      run: |
        curl --fail -sSL "https://github.com/docker/compose/releases/download/v2.32.1/docker-compose-$(uname -s)-$(uname -m)" -o /tmp/docker-compose
        mkdir -p $HOME/.docker/cli-plugins
        install -m755 /tmp/docker-compose $HOME/.docker/cli-plugins
        docker version --format 'Docker Engine version v{{.Server.Version}}'
        docker compose version
    - name: Test (Functional)
      run: |
        nohup sudo tcpdump -i lo -w "fvt-kafka-${KAFKA_VERSION}.pcap" portrange 29091-29095 >/dev/null 2>&1 &
        echo $! >tcpdump.pid
        make test_functional
    - name: Report Test Results
      if: always()
      run: |
        # renovate: datasource=github-releases depName=mfridman/tparse
        go run github.com/mfridman/tparse@v0.18.0 -all -format markdown -file _test/fvt.json | tee -a $GITHUB_STEP_SUMMARY
    - name: Report Per Func Test Coverage
      if: always()
      run: |
        cat >>$GITHUB_STEP_SUMMARY <<EOF
        <details>
        <summary>Click for per-func code coverage</summary>

        |Filename|Function|Coverage|
        |--------|--------|--------|
        $(go tool cover -func=profile.out | sed -E -e 's/[[:space:]]+/|/g' -e 's/$/|/g' -e 's/^/|/g')
        </details>
        EOF
    - name: Stop tcpdump
      if: always()
      run: |
        if [ -f "tcpdump.pid" ]; then sudo kill "$(cat tcpdump.pid)" || true; fi
        if [ -f "fvt-kafka-${KAFKA_VERSION}.pcap" ]; then sudo chmod a+r "fvt-kafka-${KAFKA_VERSION}.pcap"; fi
    - name: Upload pcap file
      if: always()
      uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
      with:
        name: fvt-kafka-${{ inputs.kafka-version }}.pcap
        path: fvt-kafka-${{ inputs.kafka-version }}.pcap
        retention-days: 5
        if-no-files-found: ignore


================================================
FILE: .github/workflows/i386.yml
================================================
name: i386
on:
  merge_group:
  push:
    branches:
    - main
    paths-ignore:
    - '**/*.md'
  pull_request:
    branches:
    - "**"
    paths-ignore:
    - '**/*.md'

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

env:
  # Use the Go toolchain installed by setup-go
  GOTOOLCHAIN: local

jobs:
  atomicalign:
    permissions:
      contents: read  # for actions/checkout to fetch code
      pull-requests: read  # for golangci/golangci-lint-action to fetch pull requests
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
      with:
        persist-credentials: false
    - name: Setup Go
      uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
      with:
        go-version: stable
    - name: staticcheck
      env:
        GOARCH: 386
        GOFLAGS: -tags=functional
      run: |
          git clone --depth=1 https://github.com/dominikh/go-tools /tmp/go-tools
          ( cd /tmp/go-tools/cmd/staticcheck && go build -o /tmp/staticcheck )
          /tmp/staticcheck -checks SA1027 ./...


================================================
FILE: .github/workflows/renovate-config.yml
================================================
name: renovate-config-validator

on:
  pull_request:
    paths:
      - '.github/renovate.json5'

permissions:
  contents: read

jobs:
  validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          sparse-checkout: |
            .github/renovate.json5
          sparse-checkout-cone-mode: false
      - uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
      - run: npx --package=renovate@latest -- renovate-config-validator


================================================
FILE: .github/workflows/scorecard.yml
================================================
name: Scorecard supply-chain security
on:
  # For Branch-Protection check. Only the default branch is supported. See
  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
  branch_protection_rule:
  # To guarantee Maintained check is occasionally updated. See
  # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
  schedule:
    - cron: '17 4 * * 5'
  push:
    branches: [ "main" ]

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

# Declare default permissions as read only.
permissions:
  actions: read
  checks: read
  contents: read
  issues: read
  pull-requests: read
  statuses: read

jobs:
  analysis:
    name: Scorecard analysis
    runs-on: ubuntu-latest
    permissions:
      # Needed to upload the results to code-scanning dashboard.
      security-events: write
      # Needed to publish results and get a badge (see publish_results below).
      id-token: write
      # Uncomment the permissions below if installing in a private repository.
      # contents: read
      # actions: read

    steps:
      - name: "Checkout code"
        uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
        with:
          persist-credentials: false

      - name: "Run analysis"
        uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # v2.4.3
        with:
          results_file: results.sarif
          results_format: sarif
          # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
          # - you want to enable the Branch-Protection check on a *public* repository, or
          # - you are installing Scorecard on a *private* repository
          # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
          # repo_token: ${{ secrets.SCORECARD_TOKEN }}

          # Public repositories:
          #   - Publish results to OpenSSF REST API for easy access by consumers
          #   - Allows the repository to include the Scorecard badge.
          #   - See https://github.com/ossf/scorecard-action#publishing-results.
          # For private repositories:
          #   - `publish_results` will always be set to `false`, regardless
          #     of the value entered here.
          publish_results: true

      # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
      # format to the repository Actions tab.
      - name: "Upload artifact"
        uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
        with:
          name: SARIF file
          path: results.sarif
          retention-days: 5

      # Upload the results to GitHub's code scanning dashboard.
      - name: "Upload to code-scanning"
        uses: github/codeql-action/upload-sarif@c793b717bc78562f491db7b0e93a3a178b099162 # v4.32.5
        with:
          sarif_file: results.sarif


================================================
FILE: .github/workflows/stale.yml
================================================
# configuration for https://github.com/actions/stale
name: "Stale issues and PRs"
on:
  schedule:
  - cron: "0 */2 * * *"
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: ${{ startsWith(github.ref, 'refs/pull/') }}

permissions:
  contents: read  # for actions/checkout to fetch code

jobs:
  stale:
    permissions:
      issues: write  # for actions/stale to close stale issues
      pull-requests: write  # for actions/stale to close stale PRs
    runs-on: ubuntu-latest
    steps:
      # pinned to main commit to make use of https://github.com/actions/stale/pull/1033
    - uses: actions/stale@b5d41d4e1d5dceea10e7104786b73624c18a190f # v10.2.0
      with:
        ascending: true
        days-before-stale: 90
        days-before-close: 30
        stale-issue-message: >-
          Thank you for taking the time to raise this issue. However, it has not had
          any activity on it in the past 90 days and will be closed in 30 days if
          no updates occur.

          Please check if the main branch has already resolved the issue since it
          was raised. If you believe the issue is still valid and you would like input
          from the maintainers then please comment to ask for it to be reviewed.
        stale-pr-message: >-
          Thank you for your contribution! However, this pull request has not had
          any activity in the past 90 days and will be closed in 30 days if no updates
          occur.

          If you believe the changes are still valid then please verify your branch
          has no conflicts with main and rebase if needed. If you are awaiting a (re-)review
          then please let us know.
        stale-issue-label: "stale"
        exempt-issue-labels: "stale/exempt,pinned"
        stale-pr-label: "stale"
        exempt-pr-labels: "stale/exempt,pinned"


================================================
FILE: .gitignore
================================================
# Compiled Object files, Static and Dynamic libs (Shared Objects)
*.o
*.a
*.so
*.test

# Folders
_obj
_test
.vagrant

# Architecture specific extensions/prefixes
*.[568vq]
[568vq].out

*.cgo1.go
*.cgo2.c
_cgo_defun.c
_cgo_gotypes.go
_cgo_export.*

_testmain.go

*.exe

/bin
/coverage.txt
/profile.out
/output.json

.idea


================================================
FILE: .golangci.yml
================================================
# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json
version: "2"
linters:
  default: none
  enable:
  - bodyclose
  - copyloopvar
  - depguard
  - dogsled
  - errcheck
  - errorlint
  - funlen
  - gochecknoinits
  - gocritic
  - gocyclo
  - gosec
  - govet
  - misspell
  - nilerr
  - unconvert
  - unused
  - whitespace
  settings:
    depguard:
      rules:
        main:
          deny:
          - pkg: io/ioutil
            desc: Use the "io" and "os" packages instead.
    dupl:
      threshold: 100
    funlen:
      lines: 300
      statements: 300
    goconst:
      min-len: 2
      min-occurrences: 3
    gocritic:
      enabled-checks:
      - importShadow
      - nestingReduce
      - stringsCompare
      # - unnamedResult
      # - whyNoLint
      disabled-checks:
      - assignOp
      - appendAssign
      - commentedOutCode
      - hugeParam
      - ifElseChain
      - singleCaseSwitch
      - sloppyReassign
      enabled-tags:
      - diagnostic
      - performance
      # - experimental
      # - opinionated
      # - style
    gocyclo:
      min-complexity: 99
    govet:
      disable:
      - fieldalignment
      - shadow
      enable-all: true
    misspell:
      locale: US
  # exclude some linters from running on certains files.
  exclusions:
    generated: lax
    presets:
    - comments
    - common-false-positives
    - legacy
    - std-error-handling
    rules:
    - linters:
      - paralleltest
      path: functional.*_test\.go
    - path: (.+)\.go$
      text: 'G115: integer overflow conversion'
    - path: (.+)\.go$
      text: 'G404: Use of weak random number generator'
    paths:
    - third_party$
    - builtin$
    - examples$
issues:
  # maximum count of issues with the same text. set to 0 for unlimited. default is 3.
  max-same-issues: 0
formatters:
  enable:
  - gofmt
  - goimports
  settings:
    goimports:
      local-prefixes:
      - github.com/IBM/sarama
  exclusions:
    generated: lax
    paths:
    - third_party$
    - builtin$
    - examples$


================================================
FILE: .pre-commit-config.yaml
================================================
fail_fast: false
default_install_hook_types: [pre-commit, commit-msg]
repos:
  - repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v6.0.0
    hooks:
      - id: check-merge-conflict
      - id: check-yaml
      - id: end-of-file-fixer
      - id: fix-byte-order-marker
      - id: mixed-line-ending
      - id: trailing-whitespace
  - repo: local
    hooks:
      - id: conventional-commit-msg-validation
        name: commit message conventional validation
        language: pygrep
        entry: '^(?:fixup! )?(breaking|build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\w\-\.]+\))?(!)?: ([\w `])+([\s\S]*)'
        args: [--multiline, --negate]
        stages: [commit-msg]
      - id: commit-msg-needs-to-be-signed-off
        name: commit message needs to be signed off
        language: pygrep
        entry: "^Signed-off-by:"
        args: [--multiline, --negate]
        stages: [commit-msg]
      - id: gofmt
        name: gofmt
        description: Format files with gofmt.
        entry: gofmt -l
        language: golang
        files: \.go$
        args: []
  - repo: https://github.com/gitleaks/gitleaks
    rev: v8.28.0
    hooks:
      - id: gitleaks
  - repo: https://github.com/golangci/golangci-lint
    rev: v2.5.0
    hooks:
      - id: golangci-lint


================================================
FILE: .whitesource
================================================
{
  "settingsInheritedFrom": "ibm-mend-config/mend-config@main"
}

================================================
FILE: CHANGELOG.md
================================================
# Changelog

## Version 1.42.2 (2024-02-09)

## What's Changed

⚠️ The go.mod directive has been bumped to 1.18 as the minimum version of Go required for the module. This was necessary to continue to receive updates from some of the third party dependencies that Sarama makes use of for compression.

### :tada: New Features / Improvements
* feat: update go directive to 1.18 by @dnwe in https://github.com/IBM/sarama/pull/2713
* feat: return KError instead of errors in AlterConfigs and DescribeConfig by @zhuliquan in https://github.com/IBM/sarama/pull/2472
### :bug: Fixes
* fix: don't waste time for backoff on member id required error by @lzakharov in https://github.com/IBM/sarama/pull/2759
* fix: prevent ConsumerGroup.Close infinitely locking by @maqdev in https://github.com/IBM/sarama/pull/2717
### :package: Dependency updates
* chore(deps): bump golang.org/x/net from 0.17.0 to 0.18.0 by @dependabot in https://github.com/IBM/sarama/pull/2716
* chore(deps): bump golang.org/x/sync to v0.5.0 by @dependabot in https://github.com/IBM/sarama/pull/2718
* chore(deps): bump github.com/pierrec/lz4/v4 from 4.1.18 to 4.1.19 by @dependabot in https://github.com/IBM/sarama/pull/2739
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 by @dependabot in https://github.com/IBM/sarama/pull/2748
* chore(deps): bump the golang-org-x group with 1 update by @dependabot in https://github.com/IBM/sarama/pull/2734
* chore(deps): bump the golang-org-x group with 2 updates by @dependabot in https://github.com/IBM/sarama/pull/2764
* chore(deps): bump github.com/pierrec/lz4/v4 from 4.1.19 to 4.1.21 by @dependabot in https://github.com/IBM/sarama/pull/2763
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/exactly_once by @dependabot in https://github.com/IBM/sarama/pull/2749
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/consumergroup by @dependabot in https://github.com/IBM/sarama/pull/2750
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/sasl_scram_client by @dependabot in https://github.com/IBM/sarama/pull/2751
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/interceptors by @dependabot in https://github.com/IBM/sarama/pull/2752
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/http_server by @dependabot in https://github.com/IBM/sarama/pull/2753
* chore(deps): bump github.com/eapache/go-resiliency from 1.4.0 to 1.5.0 by @dependabot in https://github.com/IBM/sarama/pull/2745
* chore(deps): bump golang.org/x/crypto from 0.15.0 to 0.17.0 in /examples/txn_producer by @dependabot in https://github.com/IBM/sarama/pull/2754
* chore(deps): bump go.opentelemetry.io/otel/sdk from 1.19.0 to 1.22.0 in /examples/interceptors by @dependabot in https://github.com/IBM/sarama/pull/2767
* chore(deps): bump the golang-org-x group with 1 update by @dependabot in https://github.com/IBM/sarama/pull/2793
* chore(deps): bump go.opentelemetry.io/otel/exporters/stdout/stdoutmetric from 0.42.0 to 1.23.1 in /examples/interceptors by @dependabot in https://github.com/IBM/sarama/pull/2792
### :wrench: Maintenance
* fix(examples): housekeeping of code and deps by @dnwe in https://github.com/IBM/sarama/pull/2720
### :heavy_plus_sign: Other Changes
* fix(test): retry MockBroker Listen for EADDRINUSE by @dnwe in https://github.com/IBM/sarama/pull/2721

## New Contributors
* @maqdev made their first contribution in https://github.com/IBM/sarama/pull/2717
* @zhuliquan made their first contribution in https://github.com/IBM/sarama/pull/2472

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.42.1...v1.42.2

## Version 1.42.1 (2023-11-07)

## What's Changed
### :bug: Fixes
* fix: make fetchInitialOffset use correct protocol by @dnwe in https://github.com/IBM/sarama/pull/2705
* fix(config): relax ClientID validation after 1.0.0 by @dnwe in https://github.com/IBM/sarama/pull/2706

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.42.0...v1.42.1

## Version 1.42.0 (2023-11-02)

## What's Changed
### :bug: Fixes
* Asynchronously close brokers during a RefreshBrokers by @bmassemin in https://github.com/IBM/sarama/pull/2693
* Fix data race on Broker.done channel by @prestona in https://github.com/IBM/sarama/pull/2698
* fix: data race in Broker.AsyncProduce by @lzakharov in https://github.com/IBM/sarama/pull/2678
* Fix default retention time value in offset commit by @prestona in https://github.com/IBM/sarama/pull/2700
* fix(txmgr): ErrOffsetsLoadInProgress is retriable by @dnwe in https://github.com/IBM/sarama/pull/2701
### :wrench: Maintenance
* chore(ci): improve ossf scorecard result by @dnwe in https://github.com/IBM/sarama/pull/2685
* chore(ci): add kafka 3.6.0 to FVT and versions by @dnwe in https://github.com/IBM/sarama/pull/2692
### :heavy_plus_sign: Other Changes
* chore(ci): ossf scorecard.yml by @dnwe in https://github.com/IBM/sarama/pull/2683
* fix(ci): always run CodeQL on every commit by @dnwe in https://github.com/IBM/sarama/pull/2689
* chore(doc): add OpenSSF Scorecard badge by @dnwe in https://github.com/IBM/sarama/pull/2691

## New Contributors
* @bmassemin made their first contribution in https://github.com/IBM/sarama/pull/2693
* @lzakharov made their first contribution in https://github.com/IBM/sarama/pull/2678

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.41.3...v1.42.0

## Version 1.41.3 (2023-10-17)

## What's Changed
### :bug: Fixes
* fix: pre-compile regex for parsing kafka version by @qshuai in https://github.com/IBM/sarama/pull/2663
* fix(client): ignore empty Metadata responses when refreshing by @HaoSunUber in https://github.com/IBM/sarama/pull/2672
### :package: Dependency updates
* chore(deps): bump the golang-org-x group with 2 updates by @dependabot in https://github.com/IBM/sarama/pull/2661
* chore(deps): bump golang.org/x/net from 0.16.0 to 0.17.0 by @dependabot in https://github.com/IBM/sarama/pull/2671
### :memo: Documentation
* fix(docs): correct topic name in rebalancing strategy example by @maksadbek in https://github.com/IBM/sarama/pull/2657

## New Contributors
* @maksadbek made their first contribution in https://github.com/IBM/sarama/pull/2657
* @qshuai made their first contribution in https://github.com/IBM/sarama/pull/2663

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.41.2...v1.41.3

## Version 1.41.2 (2023-09-12)

## What's Changed
### :tada: New Features / Improvements
* perf: Alloc records in batch by @ronanh in https://github.com/IBM/sarama/pull/2646
### :bug: Fixes
* fix(consumer): guard against nil client by @dnwe in https://github.com/IBM/sarama/pull/2636
* fix(consumer): don't retry session if ctx canceled by @dnwe in https://github.com/IBM/sarama/pull/2642
* fix: use least loaded broker to refresh metadata by @HaoSunUber in https://github.com/IBM/sarama/pull/2645
### :package: Dependency updates
* chore(deps): bump the golang-org-x group with 1 update by @dependabot in https://github.com/IBM/sarama/pull/2641

## New Contributors
* @HaoSunUber made their first contribution in https://github.com/IBM/sarama/pull/2645

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.41.1...v1.41.2

## Version 1.41.1 (2023-08-30)

## What's Changed
### :bug: Fixes
* fix(proto): handle V3 member metadata and empty owned partitions by @dnwe in https://github.com/IBM/sarama/pull/2618
* fix: make clear that error is configuration issue not server error by @hindessm in https://github.com/IBM/sarama/pull/2628
* fix(client): force Event Hubs to use V1_0_0_0 by @dnwe in https://github.com/IBM/sarama/pull/2633
* fix: add retries to alter user scram creds by @hindessm in https://github.com/IBM/sarama/pull/2632
### :wrench: Maintenance
* chore(lint): bump golangci-lint and tweak config by @dnwe in https://github.com/IBM/sarama/pull/2620
### :memo: Documentation
* fix(doc): add missing doc for mock consumer by @hsweif in https://github.com/IBM/sarama/pull/2386
* chore(proto): doc CreateTopics/JoinGroup fields by @dnwe in https://github.com/IBM/sarama/pull/2627
### :heavy_plus_sign: Other Changes
* chore(gh): add new style issue templates by @dnwe in https://github.com/IBM/sarama/pull/2624


**Full Changelog**: https://github.com/IBM/sarama/compare/v1.41.0...v1.41.1

## Version 1.41.0 (2023-08-21)

## What's Changed
### :rotating_light: Breaking Changes

Note: this version of Sarama has had a big overhaul in its adherence to the use of the right Kafka protocol versions for the given Config Version. It has also bumped the default Version set in Config (where one is not supplied) to 2.1.0. This is in preparation for Kafka 4.0 dropping support for protocol versions older than 2.1. If you are using Sarama against Kafka clusters older than v2.1.0, or using it against Azure EventHubs then you will likely have to change your application code to pin to the appropriate Version.

* chore(config): make DefaultVersion V2_0_0_0 by @dnwe in https://github.com/IBM/sarama/pull/2572
* chore(config): make DefaultVersion V2_1_0_0 by @dnwe in https://github.com/IBM/sarama/pull/2574
### :tada: New Features / Improvements
* Implement resolve_canonical_bootstrap_servers_only by @gebn in https://github.com/IBM/sarama/pull/2156
* feat: sleep when throttled (KIP-219) by @hindessm in https://github.com/IBM/sarama/pull/2536
* feat: add isValidVersion to protocol types by @dnwe in https://github.com/IBM/sarama/pull/2538
* fix(consumer): use newer LeaveGroup as appropriate by @dnwe in https://github.com/IBM/sarama/pull/2544
* Add support for up to version 4 List Groups API by @prestona in https://github.com/IBM/sarama/pull/2541
* fix(producer): use newer ProduceReq as appropriate by @dnwe in https://github.com/IBM/sarama/pull/2546
* fix(proto): ensure req+resp requiredVersion match by @dnwe in https://github.com/IBM/sarama/pull/2548
* chore(proto): permit CreatePartitionsRequest V1 by @dnwe in https://github.com/IBM/sarama/pull/2549
* chore(proto): permit AlterConfigsRequest V1 by @dnwe in https://github.com/IBM/sarama/pull/2550
* chore(proto): permit DeleteGroupsRequest V1 by @dnwe in https://github.com/IBM/sarama/pull/2551
* fix(proto): correct JoinGroup usage for wider version range by @dnwe in https://github.com/IBM/sarama/pull/2553
* fix(consumer): use full range of FetchRequest vers by @dnwe in https://github.com/IBM/sarama/pull/2554
* fix(proto): use range of OffsetCommitRequest vers by @dnwe in https://github.com/IBM/sarama/pull/2555
* fix(proto): use full range of MetadataRequest by @dnwe in https://github.com/IBM/sarama/pull/2556
* fix(proto): use fuller ranges of supported proto by @dnwe in https://github.com/IBM/sarama/pull/2558
* fix(proto): use full range of SyncGroupRequest by @dnwe in https://github.com/IBM/sarama/pull/2565
* fix(proto): use full range of ListGroupsRequest by @dnwe in https://github.com/IBM/sarama/pull/2568
* feat(proto): support for Metadata V6-V10 by @dnwe in https://github.com/IBM/sarama/pull/2566
* fix(proto): use full ranges for remaining proto by @dnwe in https://github.com/IBM/sarama/pull/2570
* feat(proto): add remaining protocol for V2.1 by @dnwe in https://github.com/IBM/sarama/pull/2573
* feat: add new error for MockDeleteTopicsResponse by @javiercri in https://github.com/IBM/sarama/pull/2475
* feat(gzip): switch to klauspost/compress gzip by @dnwe in https://github.com/IBM/sarama/pull/2600
### :bug: Fixes
* fix: correct unsupported version check by @hindessm in https://github.com/IBM/sarama/pull/2528
* fix: avoiding burning cpu if all partitions are paused by @napallday in https://github.com/IBM/sarama/pull/2532
* extend throttling metric scope by @hindessm in https://github.com/IBM/sarama/pull/2533
* Fix printing of final metrics by @prestona in https://github.com/IBM/sarama/pull/2545
* fix(consumer): cannot automatically fetch newly-added partitions unless restart by @napallday in https://github.com/IBM/sarama/pull/2563
* bug: implement unsigned modulus for partitioning with crc32 hashing by @csm8118 in https://github.com/IBM/sarama/pull/2560
* fix: avoid logging value of proxy.Dialer by @prestona in https://github.com/IBM/sarama/pull/2569
* fix(test): add missing closes to admin client tests by @dnwe in https://github.com/IBM/sarama/pull/2594
* fix(test): ensure some more clients are closed by @dnwe in https://github.com/IBM/sarama/pull/2595
* fix(examples): sync exactly_once and consumergroup by @dnwe in https://github.com/IBM/sarama/pull/2614
* fix(fvt): fresh metrics registry for each test by @dnwe in https://github.com/IBM/sarama/pull/2616
* fix(test): flaky test TestFuncOffsetManager by @napallday in https://github.com/IBM/sarama/pull/2609
### :package: Dependency updates
* chore(deps): bump the golang-org-x group with 1 update by @dependabot in https://github.com/IBM/sarama/pull/2542
* chore(deps): bump the golang-org-x group with 1 update by @dependabot in https://github.com/IBM/sarama/pull/2561
* chore(deps): bump module github.com/pierrec/lz4/v4 to v4.1.18 by @dnwe in https://github.com/IBM/sarama/pull/2589
* chore(deps): bump module github.com/jcmturner/gokrb5/v8 to v8.4.4 by @dnwe in https://github.com/IBM/sarama/pull/2587
* chore(deps): bump github.com/eapache/go-xerial-snappy digest to c322873 by @dnwe in https://github.com/IBM/sarama/pull/2586
* chore(deps): bump module github.com/klauspost/compress to v1.16.7 by @dnwe in https://github.com/IBM/sarama/pull/2588
* chore(deps): bump github.com/eapache/go-resiliency from 1.3.0 to 1.4.0 by @dependabot in https://github.com/IBM/sarama/pull/2598
### :wrench: Maintenance
* fix(fvt): ensure fully-replicated at test start by @hindessm in https://github.com/IBM/sarama/pull/2531
* chore: rollup fvt kafka to latest three by @dnwe in https://github.com/IBM/sarama/pull/2537
* Merge the two CONTRIBUTING.md's by @prestona in https://github.com/IBM/sarama/pull/2543
* fix(test): test timing error by @hindessm in https://github.com/IBM/sarama/pull/2552
* chore(ci): tidyup and improve actions workflows by @dnwe in https://github.com/IBM/sarama/pull/2557
* fix(test): shutdown MockBroker by @dnwe in https://github.com/IBM/sarama/pull/2571
* chore(proto): match HeartbeatResponse version by @dnwe in https://github.com/IBM/sarama/pull/2576
* chore(test): ensure MockBroker closed within test by @dnwe in https://github.com/IBM/sarama/pull/2575
* chore(test): ensure all mockresponses use version by @dnwe in https://github.com/IBM/sarama/pull/2578
* chore(ci): use latest Go in actions by @dnwe in https://github.com/IBM/sarama/pull/2580
* chore(test): speedup some slow tests by @dnwe in https://github.com/IBM/sarama/pull/2579
* chore(test): use modern protocol versions in FVT by @dnwe in https://github.com/IBM/sarama/pull/2581
* chore(test): fix a couple of leaks by @dnwe in https://github.com/IBM/sarama/pull/2591
* feat(fvt): experiment with per-kafka-version image by @dnwe in https://github.com/IBM/sarama/pull/2592
* chore(ci): replace toxiproxy client dep by @dnwe in https://github.com/IBM/sarama/pull/2593
* feat(fvt): add healthcheck, depends_on and --wait by @dnwe in https://github.com/IBM/sarama/pull/2601
* fix(fvt): handle msgset vs batchset by @dnwe in https://github.com/IBM/sarama/pull/2603
* fix(fvt): Metadata version in ensureFullyReplicated by @dnwe in https://github.com/IBM/sarama/pull/2612
* fix(fvt): versioned cfg for invalid topic producer by @dnwe in https://github.com/IBM/sarama/pull/2613
* chore(fvt): tweak to work across more versions by @dnwe in https://github.com/IBM/sarama/pull/2615
* feat(fvt): test wider range of kafkas by @dnwe in https://github.com/IBM/sarama/pull/2605
### :memo: Documentation
* fix(example): check if msg channel is closed by @ioanzicu in https://github.com/IBM/sarama/pull/2479
* chore: use go install for installing sarama tools by @vigith in https://github.com/IBM/sarama/pull/2599

## New Contributors
* @gebn made their first contribution in https://github.com/IBM/sarama/pull/2156
* @prestona made their first contribution in https://github.com/IBM/sarama/pull/2543
* @ioanzicu made their first contribution in https://github.com/IBM/sarama/pull/2479
* @csm8118 made their first contribution in https://github.com/IBM/sarama/pull/2560
* @javiercri made their first contribution in https://github.com/IBM/sarama/pull/2475
* @vigith made their first contribution in https://github.com/IBM/sarama/pull/2599

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.40.1...v1.41.0

## Version 1.40.1 (2023-07-27)

## What's Changed
### :tada: New Features / Improvements
* Use buffer pools for decompression by @ronanh in https://github.com/IBM/sarama/pull/2484
* feat: support for Kerberos authentication with a credentials cache. by @mrogaski in https://github.com/IBM/sarama/pull/2457
### :bug: Fixes
* Fix some retry issues by @hindessm in https://github.com/IBM/sarama/pull/2517
* fix: admin retry logic by @hindessm in https://github.com/IBM/sarama/pull/2519
* Add some retry logic to more admin client functions by @hindessm in https://github.com/IBM/sarama/pull/2520
* fix: concurrent issue on updateMetadataMs by @napallday in https://github.com/IBM/sarama/pull/2522
* fix(test): allow testing of skipped test without IsTransactional panic by @hindessm in https://github.com/IBM/sarama/pull/2525
### :package: Dependency updates
* chore(deps): bump the golang-org-x group with 2 updates by @dependabot in https://github.com/IBM/sarama/pull/2509
* chore(deps): bump github.com/klauspost/compress from 1.15.14 to 1.16.6 by @dependabot in https://github.com/IBM/sarama/pull/2513
* chore(deps): bump github.com/stretchr/testify from 1.8.1 to 1.8.3 by @dependabot in https://github.com/IBM/sarama/pull/2512
### :wrench: Maintenance
* chore(ci): migrate probot-stale to actions/stale by @dnwe in https://github.com/IBM/sarama/pull/2496
* chore(ci): bump golangci version, cleanup, depguard config by @EladLeev in https://github.com/IBM/sarama/pull/2504
* Clean up some typos and docs/help mistakes by @hindessm in https://github.com/IBM/sarama/pull/2514
### :heavy_plus_sign: Other Changes
* chore(ci): add simple apidiff workflow by @dnwe in https://github.com/IBM/sarama/pull/2497
* chore(ci): bump actions/setup-go from 3 to 4 by @dependabot in https://github.com/IBM/sarama/pull/2508
* fix(comments): PauseAll and ResumeAll by @napallday in https://github.com/IBM/sarama/pull/2523

## New Contributors
* @EladLeev made their first contribution in https://github.com/IBM/sarama/pull/2504
* @hindessm made their first contribution in https://github.com/IBM/sarama/pull/2514
* @ronanh made their first contribution in https://github.com/IBM/sarama/pull/2484
* @mrogaski made their first contribution in https://github.com/IBM/sarama/pull/2457

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.40.0...v1.40.1

## Version 1.40.0 (2023-07-17)

## What's Changed

Note: this is the first release after the transition of Sarama ownership from Shopify to IBM in https://github.com/IBM/sarama/issues/2461

### :rotating_light: Breaking Changes

- chore: migrate module to github.com/IBM/sarama by @dnwe in https://github.com/IBM/sarama/pull/2492
- fix: restore (\*OffsetCommitRequest) AddBlock func by @dnwe in https://github.com/IBM/sarama/pull/2494

### :bug: Fixes

- fix(consumer): don't retry FindCoordinator forever by @dnwe in https://github.com/IBM/sarama/pull/2427
- fix(metrics): fix race condition when calling Broker.Open() twice by @vincentbernat in https://github.com/IBM/sarama/pull/2428
- fix: use version 4 of DescribeGroupsRequest only if kafka broker vers… …ion is >= 2.4 by @faillefer in https://github.com/IBM/sarama/pull/2451
- Fix HighWaterMarkOffset of mocks partition consumer by @gr8web in https://github.com/IBM/sarama/pull/2447
- fix: prevent data race in balance strategy by @napallday in https://github.com/IBM/sarama/pull/2453

### :package: Dependency updates

- chore(deps): bump golang.org/x/net from 0.5.0 to 0.7.0 by @dependabot in https://github.com/IBM/sarama/pull/2452

### :wrench: Maintenance

- chore: add kafka 3.3.2 by @dnwe in https://github.com/IBM/sarama/pull/2434
- chore(ci): remove Shopify/shopify-cla-action by @dnwe in https://github.com/IBM/sarama/pull/2489
- chore: bytes.Equal instead bytes.Compare by @testwill in https://github.com/IBM/sarama/pull/2485

## New Contributors

- @dependabot made their first contribution in https://github.com/IBM/sarama/pull/2452
- @gr8web made their first contribution in https://github.com/IBM/sarama/pull/2447
- @testwill made their first contribution in https://github.com/IBM/sarama/pull/2485

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.38.1...v1.40.0

## Version 1.38.1 (2023-01-22)

## What's Changed
### :bug: Fixes
* fix(example): correct `records-number` param in txn producer readme by @diallo-han in https://github.com/IBM/sarama/pull/2420
* fix: use newConsumer method in newConsumerGroup method by @Lumotheninja in https://github.com/IBM/sarama/pull/2424
### :package: Dependency updates
* chore(deps): bump module github.com/klauspost/compress to v1.15.14 by @dnwe in https://github.com/IBM/sarama/pull/2410
* chore(deps): bump module golang.org/x/net to v0.5.0 by @dnwe in https://github.com/IBM/sarama/pull/2413
* chore(deps): bump module github.com/stretchr/testify to v1.8.1 by @dnwe in https://github.com/IBM/sarama/pull/2411
* chore(deps): bump module github.com/xdg-go/scram to v1.1.2 by @dnwe in https://github.com/IBM/sarama/pull/2412
* chore(deps): bump module golang.org/x/sync to v0.1.0 by @dnwe in https://github.com/IBM/sarama/pull/2414
* chore(deps): bump github.com/eapache/go-xerial-snappy digest to bf00bc1 by @dnwe in https://github.com/IBM/sarama/pull/2418

## New Contributors
* @diallo-han made their first contribution in https://github.com/IBM/sarama/pull/2420
* @Lumotheninja made their first contribution in https://github.com/IBM/sarama/pull/2424

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.38.0...v1.38.1

## Version 1.38.0 (2023-01-08)

## What's Changed
### :tada: New Features / Improvements
* feat(producer): improve memory usage of zstd encoder by using our own pool management by @rtreffer in https://github.com/IBM/sarama/pull/2375
* feat(proto): implement and use MetadataRequest v7 by @dnwe in https://github.com/IBM/sarama/pull/2388
* feat(metrics): add protocol-requests-rate metric by @auntan in https://github.com/IBM/sarama/pull/2373
### :bug: Fixes
* fix(proto): track and supply leader epoch to FetchRequest by @dnwe in https://github.com/IBM/sarama/pull/2389
* fix(example): improve arg name used for tls skip verify by @michaeljmarshall in https://github.com/IBM/sarama/pull/2385
* fix(zstd): default back to GOMAXPROCS concurrency by @bgreenlee in https://github.com/IBM/sarama/pull/2404
* fix(producer): add nil check while producer is retrying by @hsweif in https://github.com/IBM/sarama/pull/2387
* fix(producer): return errors for every message in retryBatch to avoid producer hang forever by @cch123 in https://github.com/IBM/sarama/pull/2378
* fix(metrics): fix race when accessing metric registry by @vincentbernat in https://github.com/IBM/sarama/pull/2409
### :package: Dependency updates
* chore(deps): bump golang.org/x/net to v0.4.0 by @dnwe in https://github.com/IBM/sarama/pull/2403
### :wrench: Maintenance
* chore(ci): replace set-output command in GH Action by @dnwe in https://github.com/IBM/sarama/pull/2390
* chore(ci): include kafka 3.3.1 in testing matrix by @dnwe in https://github.com/IBM/sarama/pull/2406

## New Contributors
* @michaeljmarshall made their first contribution in https://github.com/IBM/sarama/pull/2385
* @bgreenlee made their first contribution in https://github.com/IBM/sarama/pull/2404
* @hsweif made their first contribution in https://github.com/IBM/sarama/pull/2387
* @cch123 made their first contribution in https://github.com/IBM/sarama/pull/2378

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.37.2...v1.38.0

## Version 1.37.2 (2022-10-04)

## What's Changed
### :bug: Fixes
* fix: ensure updateMetaDataMs is 64-bit aligned by @dnwe in https://github.com/IBM/sarama/pull/2356
### :heavy_plus_sign: Other Changes
* fix: bump go.mod specification to go 1.17 by @dnwe in https://github.com/IBM/sarama/pull/2357


**Full Changelog**: https://github.com/IBM/sarama/compare/v1.37.1...v1.37.2

## Version 1.37.1 (2022-10-04)

## What's Changed
### :bug: Fixes
* fix: support existing deprecated Rebalance.Strategy field usage by @spongecaptain in https://github.com/IBM/sarama/pull/2352
* fix(test): consumer group rebalance strategy compatibility by @Jacob-bzx in https://github.com/IBM/sarama/pull/2353
* fix(producer): replace time.After with time.Timer to avoid high memory usage by @Jacob-bzx in https://github.com/IBM/sarama/pull/2355

## New Contributors
* @spongecaptain made their first contribution in https://github.com/IBM/sarama/pull/2352

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.37.0...v1.37.1

## Version 1.37.0 (2022-09-28)

## What's Changed

### :rotating_light: Breaking Changes
* Due to a change in [github.com/klauspost/compress v1.15.10](https://github.com/klauspost/compress/releases/tag/v1.15.10), Sarama v1.37.0 requires Go 1.17 going forward, unfortunately due to an oversight this wasn't reflected in the go.mod declaration at time of release.

### :tada: New Features / Improvements
* feat(consumer): support multiple balance strategies by @Jacob-bzx in https://github.com/IBM/sarama/pull/2339
* feat(producer): transactional API by @ryarnyah in https://github.com/IBM/sarama/pull/2295
* feat(mocks): support key in MockFetchResponse. by @Skandalik in https://github.com/IBM/sarama/pull/2328
### :bug: Fixes
* fix: avoid panic when Metadata.RefreshFrequency is 0 by @Jacob-bzx in https://github.com/IBM/sarama/pull/2329
* fix(consumer): avoid pushing unrelated responses to paused children by @pkoutsovasilis in https://github.com/IBM/sarama/pull/2317
* fix: prevent metrics leak with cleanup by @auntan in https://github.com/IBM/sarama/pull/2340
* fix: race condition(may panic) when closing consumer group by @Jacob-bzx in https://github.com/IBM/sarama/pull/2331
* fix(consumer): default ResetInvalidOffsets to true by @dnwe in https://github.com/IBM/sarama/pull/2345
* Validate the `Config` when creating a mock producer/consumer by @joewreschnig in https://github.com/IBM/sarama/pull/2327
### :package: Dependency updates
* chore(deps): bump module github.com/pierrec/lz4/v4 to v4.1.16 by @dnwe in https://github.com/IBM/sarama/pull/2335
* chore(deps): bump golang.org/x/net digest to bea034e by @dnwe in https://github.com/IBM/sarama/pull/2333
* chore(deps): bump golang.org/x/sync digest to 7f9b162 by @dnwe in https://github.com/IBM/sarama/pull/2334
* chore(deps): bump golang.org/x/net digest to f486391 by @dnwe in https://github.com/IBM/sarama/pull/2348
* chore(deps): bump module github.com/shopify/toxiproxy/v2 to v2.5.0 by @dnwe in https://github.com/IBM/sarama/pull/2336
* chore(deps): bump module github.com/klauspost/compress to v1.15.11 by @dnwe in https://github.com/IBM/sarama/pull/2349
* chore(deps): bump module github.com/pierrec/lz4/v4 to v4.1.17 by @dnwe in https://github.com/IBM/sarama/pull/2350
### :wrench: Maintenance
* chore(ci): bump kafka-versions to latest by @dnwe in https://github.com/IBM/sarama/pull/2346
* chore(ci): bump go-versions to N and N-1 by @dnwe in https://github.com/IBM/sarama/pull/2347

## New Contributors
* @Jacob-bzx made their first contribution in https://github.com/IBM/sarama/pull/2329
* @pkoutsovasilis made their first contribution in https://github.com/IBM/sarama/pull/2317
* @Skandalik made their first contribution in https://github.com/IBM/sarama/pull/2328
* @auntan made their first contribution in https://github.com/IBM/sarama/pull/2340
* @ryarnyah made their first contribution in https://github.com/IBM/sarama/pull/2295

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.36.0...v1.37.0

## Version 1.36.0 (2022-08-11)

## What's Changed
### :tada: New Features / Improvements
* feat: add option to propagate OffsetOutOfRange error by @dkolistratova in https://github.com/IBM/sarama/pull/2252
* feat(producer): expose ProducerMessage.byteSize() function by @k8scat in https://github.com/IBM/sarama/pull/2315
* feat(metrics): track consumer fetch request rates by @dnwe in https://github.com/IBM/sarama/pull/2299
### :bug: Fixes
* fix(consumer): avoid submitting empty fetch requests when paused by @raulnegreiros in https://github.com/IBM/sarama/pull/2143
### :package: Dependency updates
* chore(deps): bump module github.com/klauspost/compress to v1.15.9 by @dnwe in https://github.com/IBM/sarama/pull/2304
* chore(deps): bump golang.org/x/net digest to c7608f3 by @dnwe in https://github.com/IBM/sarama/pull/2301
* chore(deps): bump golangci/golangci-lint-action action to v3 by @dnwe in https://github.com/IBM/sarama/pull/2311
* chore(deps): bump golang.org/x/net digest to 07c6da5 by @dnwe in https://github.com/IBM/sarama/pull/2307
* chore(deps): bump github actions versions (major) by @dnwe in https://github.com/IBM/sarama/pull/2313
* chore(deps): bump module github.com/jcmturner/gofork to v1.7.6 by @dnwe in https://github.com/IBM/sarama/pull/2305
* chore(deps): bump golang.org/x/sync digest to 886fb93 by @dnwe in https://github.com/IBM/sarama/pull/2302
* chore(deps): bump module github.com/jcmturner/gokrb5/v8 to v8.4.3 by @dnwe in https://github.com/IBM/sarama/pull/2303
### :wrench: Maintenance
* chore: add kafka 3.1.1 to the version matrix by @dnwe in https://github.com/IBM/sarama/pull/2300
### :heavy_plus_sign: Other Changes
* Migrate off probot-CLA to new GitHub Action by @cursedcoder in https://github.com/IBM/sarama/pull/2294
* Forgot to remove cla probot by @cursedcoder in https://github.com/IBM/sarama/pull/2297
* chore(lint): re-enable a small amount of go-critic by @dnwe in https://github.com/IBM/sarama/pull/2312

## New Contributors
* @cursedcoder made their first contribution in https://github.com/IBM/sarama/pull/2294
* @dkolistratova made their first contribution in https://github.com/IBM/sarama/pull/2252
* @k8scat made their first contribution in https://github.com/IBM/sarama/pull/2315

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.35.0...v1.36.0

## Version 1.35.0 (2022-07-22)

## What's Changed
### :bug: Fixes
* fix: fix metadata retry backoff invalid when get metadata failed by @Stephan14 in https://github.com/IBM/sarama/pull/2256
* fix(balance): sort and de-deplicate memberIDs by @dnwe in https://github.com/IBM/sarama/pull/2285
* fix: prevent DescribeLogDirs hang in admin client by @zerowidth in https://github.com/IBM/sarama/pull/2269
* fix: include assignment-less members in SyncGroup by @dnwe in https://github.com/IBM/sarama/pull/2292
### :package: Dependency updates
* chore(deps): bump module github.com/stretchr/testify to v1.8.0 by @dnwe in https://github.com/IBM/sarama/pull/2284
* chore(deps): bump module github.com/eapache/go-resiliency to v1.3.0 by @dnwe in https://github.com/IBM/sarama/pull/2283
* chore(deps): bump golang.org/x/net digest to 1185a90 by @dnwe in https://github.com/IBM/sarama/pull/2279
* chore(deps): bump module github.com/pierrec/lz4/v4 to v4.1.15 by @dnwe in https://github.com/IBM/sarama/pull/2281
* chore(deps): bump module github.com/klauspost/compress to v1.15.8 by @dnwe in https://github.com/IBM/sarama/pull/2280
### :wrench: Maintenance
* chore: rename `any` func to avoid identifier by @dnwe in https://github.com/IBM/sarama/pull/2272
* chore: add and test against kafka 3.2.0 by @dnwe in https://github.com/IBM/sarama/pull/2288
* chore: document Fetch protocol fields by @dnwe in https://github.com/IBM/sarama/pull/2289
### :heavy_plus_sign: Other Changes
* chore(ci): fix redirect with GITHUB_STEP_SUMMARY by @dnwe in https://github.com/IBM/sarama/pull/2286
* fix(test): permit ECONNRESET in TestInitProducerID by @dnwe in https://github.com/IBM/sarama/pull/2287
* fix: ensure empty or devel version valid by @dnwe in https://github.com/IBM/sarama/pull/2291

## New Contributors
* @zerowidth made their first contribution in https://github.com/IBM/sarama/pull/2269

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.34.1...v1.35.0

##  Version 1.34.1 (2022-06-07)

## What's Changed
### :bug: Fixes
* fix(examples): check session.Context().Done() in examples/consumergroup by @zxc111 in https://github.com/IBM/sarama/pull/2240
* fix(protocol): move AuthorizedOperations into GroupDescription of DescribeGroupsResponse by @aiquestion in https://github.com/IBM/sarama/pull/2247
* fix(protocol): tidyup DescribeGroupsResponse by @dnwe in https://github.com/IBM/sarama/pull/2248
* fix(consumer): range balance strategy not like reference by @njhartwell in https://github.com/IBM/sarama/pull/2245
### :wrench: Maintenance
* chore(ci): experiment with using tparse by @dnwe in https://github.com/IBM/sarama/pull/2236
* chore(deps): bump thirdparty dependencies to latest releases by @dnwe in https://github.com/IBM/sarama/pull/2242

## New Contributors
* @zxc111 made their first contribution in https://github.com/IBM/sarama/pull/2240
* @njhartwell made their first contribution in https://github.com/IBM/sarama/pull/2245

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.34.0...v1.34.1

## Version 1.34.0 (2022-05-30)

## What's Changed
### :tada: New Features / Improvements
* KIP-345: support static membership by @aiquestion in https://github.com/IBM/sarama/pull/2230
### :bug: Fixes
* fix: KIP-368 use receiver goroutine to process all sasl v1 responses by @k-wall in https://github.com/IBM/sarama/pull/2234
### :wrench: Maintenance
* chore(deps): bump module github.com/pierrec/lz4 to v4 by @dnwe in https://github.com/IBM/sarama/pull/2231
* chore(deps): bump golang.org/x/net digest to 2e3eb7b by @dnwe in https://github.com/IBM/sarama/pull/2232

## New Contributors
* @aiquestion made their first contribution in https://github.com/IBM/sarama/pull/2230

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.33.0...v1.34.0

## Version 1.33.0 (2022-05-11)

## What's Changed
### :rotating_light: Breaking Changes

**Note: with this change, the user of Sarama is required to use Go 1.13's errors.Is etc (rather then ==) when forming conditionals returned by this library.**
* feat: make `ErrOutOfBrokers` wrap the underlying error that prevented connections to the brokers by @k-wall in https://github.com/IBM/sarama/pull/2131


### :tada: New Features / Improvements
* feat(message): add UnmarshalText method to CompressionCodec by @vincentbernat in https://github.com/IBM/sarama/pull/2172
* KIP-368 : Allow SASL Connections to Periodically Re-Authenticate by @k-wall in https://github.com/IBM/sarama/pull/2197
* feat: add batched CreateACLs func to ClusterAdmin by @nkostoulas in https://github.com/IBM/sarama/pull/2191
### :bug: Fixes
* fix: TestRecordBatchDecoding failing sporadically by @k-wall in https://github.com/IBM/sarama/pull/2154
* feat(test): add an fvt for broker deadlock by @dnwe in https://github.com/IBM/sarama/pull/2144
* fix: avoid starvation in subscriptionManager by @dnwe in https://github.com/IBM/sarama/pull/2109
* fix: remove "Is your cluster reachable?" from msg by @dnwe in https://github.com/IBM/sarama/pull/2165
* fix: remove trailing fullstop from error strings by @dnwe in https://github.com/IBM/sarama/pull/2166
* fix: return underlying sasl error message by @dnwe in https://github.com/IBM/sarama/pull/2164
* fix: potential data race on a global variable by @pior in https://github.com/IBM/sarama/pull/2171
* fix: AdminClient | CreateACLs | check for error in response, return error if needed by @omris94 in https://github.com/IBM/sarama/pull/2185
* producer: ensure that the management message (fin) is never "leaked" by @niamster in https://github.com/IBM/sarama/pull/2182
* fix: prevent RefreshBrokers leaking old brokers  by @k-wall in https://github.com/IBM/sarama/pull/2203
* fix: prevent RefreshController leaking controller by @k-wall in https://github.com/IBM/sarama/pull/2204
* fix: prevent AsyncProducer retryBatch from leaking  by @k-wall in https://github.com/IBM/sarama/pull/2208
* fix: prevent metrics leak when authenticate fails  by @Stephan14 in https://github.com/IBM/sarama/pull/2205
* fix: prevent deadlock between subscription manager and consumer goroutines by @niamster in https://github.com/IBM/sarama/pull/2194
* fix: prevent idempotent producer epoch exhaustion by @ladislavmacoun in https://github.com/IBM/sarama/pull/2178
* fix(test): mockbroker offsetResponse vers behavior by @dnwe in https://github.com/IBM/sarama/pull/2213
* fix: cope with OffsetsLoadInProgress on Join+Sync  by @dnwe in https://github.com/IBM/sarama/pull/2214
* fix: make default MaxWaitTime 500ms by @dnwe in https://github.com/IBM/sarama/pull/2227
### :package: Dependency updates
* chore(deps): bump xdg-go/scram and klauspost/compress by @dnwe in https://github.com/IBM/sarama/pull/2170
### :wrench: Maintenance
* fix(test): skip TestReadOnlyAndAllCommittedMessages by @dnwe in https://github.com/IBM/sarama/pull/2161
* fix(test): remove t.Parallel() by @dnwe in https://github.com/IBM/sarama/pull/2162
* chore(ci): bump along to Go 1.17+1.18 and bump golangci-lint by @dnwe in https://github.com/IBM/sarama/pull/2183
* chore: switch to multi-arch compatible docker images by @dnwe in https://github.com/IBM/sarama/pull/2210
### :heavy_plus_sign: Other Changes
* Remediate a number go-routine leaks (mainly test issues) by @k-wall in https://github.com/IBM/sarama/pull/2198
* chore: retract v1.32.0 due to #2150 by @dnwe in https://github.com/IBM/sarama/pull/2199
* chore: bump functional test timeout to 12m by @dnwe in https://github.com/IBM/sarama/pull/2200
* fix(admin): make DeleteRecords err consistent by @dnwe in https://github.com/IBM/sarama/pull/2226

## New Contributors
* @k-wall made their first contribution in https://github.com/IBM/sarama/pull/2154
* @pior made their first contribution in https://github.com/IBM/sarama/pull/2171
* @omris94 made their first contribution in https://github.com/IBM/sarama/pull/2185
* @vincentbernat made their first contribution in https://github.com/IBM/sarama/pull/2172
* @niamster made their first contribution in https://github.com/IBM/sarama/pull/2182
* @ladislavmacoun made their first contribution in https://github.com/IBM/sarama/pull/2178
* @nkostoulas made their first contribution in https://github.com/IBM/sarama/pull/2191

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.32.0...v1.33.0

## Version 1.32.0 (2022-02-24)

### ⚠️ This release has been superseded by v1.33.0 and should _not_ be used.

* chore: retract v1.32.0 due to #2150 by @dnwe in https://github.com/IBM/sarama/pull/2199

---

## What's Changed
### :bug: Fixes
* Fix deadlock when closing Broker in brokerProducer by @slaunay in https://github.com/IBM/sarama/pull/2133
### :package: Dependency updates
* chore: refresh dependencies to latest by @dnwe in https://github.com/IBM/sarama/pull/2159
### :wrench: Maintenance
* fix: rework RebalancingMultiplePartitions test by @dnwe in https://github.com/IBM/sarama/pull/2130
* fix(test): use Sarama transactional producer by @dnwe in https://github.com/IBM/sarama/pull/1939
* chore: enable t.Parallel() wherever possible by @dnwe in https://github.com/IBM/sarama/pull/2138
### :heavy_plus_sign: Other Changes
* chore: restrict to 1 testbinary at once by @dnwe in https://github.com/IBM/sarama/pull/2145
* chore: restrict to 1 parallel test at once by @dnwe in https://github.com/IBM/sarama/pull/2146
* Remove myself from codeowners by @bai in https://github.com/IBM/sarama/pull/2147
* chore: add retractions for known bad versions by @dnwe in https://github.com/IBM/sarama/pull/2160


**Full Changelog**: https://github.com/IBM/sarama/compare/v1.31.1...v1.32.0

## Version 1.31.1 (2022-02-01)

- #2126 - @bai - Populate missing kafka versions
- #2124 - @bai - Add Kafka 3.1.0 to CI matrix, migrate to bitnami kafka image
- #2123 - @bai - Update klauspost/compress to 0.14
- #2122 - @dnwe - fix(test): make it simpler to re-use toxiproxy
- #2119 - @bai - Add Kafka 3.1.0 version number
- #2005 - @raulnegreiros - feat: add methods to pause/resume consumer's consumption
- #2051 - @seveas - Expose the TLS connection state of a broker connection
- #2117 - @wuhuizuo - feat: add method MockApiVersionsResponse.SetApiKeys
- #2110 - @dnwe - fix: ensure heartbeats only stop after cleanup
- #2113 - @mosceo - Fix typo

## Version 1.31.0 (2022-01-18)

## What's Changed
### :tada: New Features / Improvements
* feat: expose IncrementalAlterConfigs API in admin.go by @fengyinqiao in https://github.com/IBM/sarama/pull/2088
* feat: allow AsyncProducer to have MaxOpenRequests inflight produce requests per broker by @xujianhai666 in https://github.com/IBM/sarama/pull/1686
* Support request pipelining in AsyncProducer by @slaunay in https://github.com/IBM/sarama/pull/2094
### :bug: Fixes
* fix(test): add fluent interface for mocks where missing by @grongor in https://github.com/IBM/sarama/pull/2080
* fix(test): test for ConsumePartition with OffsetOldest by @grongor in https://github.com/IBM/sarama/pull/2081
* fix: set HWMO during creation of partitionConsumer (fix incorrect HWMO before first fetch) by @grongor in https://github.com/IBM/sarama/pull/2082
* fix: ignore non-nil but empty error strings in Describe/Alter client quotas responses by @agriffaut in https://github.com/IBM/sarama/pull/2096
* fix: skip over KIP-482 tagged fields by @dnwe in https://github.com/IBM/sarama/pull/2107
* fix: clear preferredReadReplica if broker shutdown by @dnwe in https://github.com/IBM/sarama/pull/2108
* fix(test): correct wrong offsets in mock Consumer by @grongor in https://github.com/IBM/sarama/pull/2078
* fix: correct bugs in DescribeGroupsResponse by @dnwe in https://github.com/IBM/sarama/pull/2111
### :wrench: Maintenance
* chore: bump runtime and test dependencies by @dnwe in https://github.com/IBM/sarama/pull/2100
### :memo: Documentation
* docs: refresh README.md for Kafka 3.0.0 by @dnwe in https://github.com/IBM/sarama/pull/2099
### :heavy_plus_sign: Other Changes
* Fix typo by @mosceo in https://github.com/IBM/sarama/pull/2084

## New Contributors
* @grongor made their first contribution in https://github.com/IBM/sarama/pull/2080
* @fengyinqiao made their first contribution in https://github.com/IBM/sarama/pull/2088
* @xujianhai666 made their first contribution in https://github.com/IBM/sarama/pull/1686
* @mosceo made their first contribution in https://github.com/IBM/sarama/pull/2084

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.30.1...v1.31.0

## Version 1.30.1 (2021-12-04)

## What's Changed
### :tada: New Features / Improvements
* feat(zstd): pass level param through to compress/zstd encoder by @lizthegrey in https://github.com/IBM/sarama/pull/2045
### :bug: Fixes
* fix: set min-go-version to 1.16 by @troyanov in https://github.com/IBM/sarama/pull/2048
* logger: fix debug logs' formatting directives by @utrack in https://github.com/IBM/sarama/pull/2054
* fix: stuck on the batch with zero records length by @pachmu in https://github.com/IBM/sarama/pull/2057
* fix: only update preferredReadReplica if valid by @dnwe in https://github.com/IBM/sarama/pull/2076
### :wrench: Maintenance
* chore: add release notes configuration by @dnwe in https://github.com/IBM/sarama/pull/2046
* chore: confluent platform version bump by @lizthegrey in https://github.com/IBM/sarama/pull/2070

## Notes
* ℹ️ from Sarama 1.30.x onward the minimum version of Go toolchain required is 1.16.x

## New Contributors
* @troyanov made their first contribution in https://github.com/IBM/sarama/pull/2048
* @lizthegrey made their first contribution in https://github.com/IBM/sarama/pull/2045
* @utrack made their first contribution in https://github.com/IBM/sarama/pull/2054
* @pachmu made their first contribution in https://github.com/IBM/sarama/pull/2057

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.30.0...v1.30.1

## Version 1.30.0 (2021-09-29)

⚠️ This release has been superseded by v1.30.1 and should _not_ be used.

**regression**: enabling rackawareness causes severe throughput drops (#2071) — fixed in v1.30.1 via #2076

---

ℹ️ **Note: from Sarama 1.30.0 the minimum version of Go toolchain required is 1.16.x**

---

# New Features / Improvements

- #1983 - @zifengyu - allow configure AllowAutoTopicCreation argument in metadata refresh
- #2000 - @matzew - Using xdg-go module for SCRAM
- #2003 - @gdm85 - feat: add counter metrics for consumer group join/sync and their failures
- #1992 - @zhaomoran - feat: support SaslHandshakeRequest v0 for SCRAM
- #2006 - @faillefer - Add support for DeleteOffsets operation
- #1909 - @agriffaut - KIP-546 Client quota APIs
- #1633 - @aldelucca1 - feat: allow balance strategies to provide initial state
- #1275 - @dnwe - log: add a DebugLogger that proxies to Logger
- #2018 - @dnwe - feat: use DebugLogger reference for goldenpath log
- #2019 - @dnwe - feat: add logging & a metric for producer throttle
- #2023 - @dnwe - feat: add Controller() to ClusterAdmin interface
- #2025 - @dnwe - feat: support ApiVersionsRequest V3 protocol
- #2028 - @dnwe - feat: send ApiVersionsRequest on broker open
- #2034 - @bai - Add support for kafka 3.0.0

# Fixes

- #1990 - @doxsch - fix: correctly pass ValidateOnly through to CreatePartitionsRequest
- #1988 - @LubergAlexander - fix: correct WithCustomFallbackPartitioner implementation
- #2001 - @HurSungYun - docs: inform AsyncProducer Close pitfalls
- #1973 - @qiangmzsx - fix: metrics still taking up too much memory when metrics.UseNilMetrics=true
- #2007 - @bai - Add support for Go 1.17
- #2009 - @dnwe - fix: enable nilerr linter and fix iferr checks
- #2010 - @dnwe - chore: enable exportloopref and misspell linters
- #2013 - @faillefer - fix(test): disable encoded response/request check when map contains multiple elements
- #2015 - @bai - Change default branch to main
- #1718 - @crivera-fastly - fix: correct the error handling in client.InitProducerID()
- #1984 - @null-sleep - fix(test): bump confluentPlatformVersion from 6.1.1 to 6.2.0
- #2016 - @dnwe - chore: replace deprecated Go calls
- #2017 - @dnwe - chore: delete legacy vagrant script
- #2020 - @dnwe - fix(test): remove testLogger from TrackLeader test
- #2024 - @dnwe - chore: bump toxiproxy container to v2.1.5
- #2033 - @bai - Update dependencies
- #2031 - @gdm85 - docs: do not mention buffered messages in sync producer Close method
- #2035 - @dnwe - chore: populate the missing kafka versions
- #2038 - @dnwe - feat: add a fuzzing workflow to github actions

## New Contributors
* @zifengyu made their first contribution in https://github.com/IBM/sarama/pull/1983
* @doxsch made their first contribution in https://github.com/IBM/sarama/pull/1990
* @LubergAlexander made their first contribution in https://github.com/IBM/sarama/pull/1988
* @HurSungYun made their first contribution in https://github.com/IBM/sarama/pull/2001
* @gdm85 made their first contribution in https://github.com/IBM/sarama/pull/2003
* @qiangmzsx made their first contribution in https://github.com/IBM/sarama/pull/1973
* @zhaomoran made their first contribution in https://github.com/IBM/sarama/pull/1992
* @faillefer made their first contribution in https://github.com/IBM/sarama/pull/2006
* @crivera-fastly made their first contribution in https://github.com/IBM/sarama/pull/1718
* @null-sleep made their first contribution in https://github.com/IBM/sarama/pull/1984

**Full Changelog**: https://github.com/IBM/sarama/compare/v1.29.1...v1.30.0

## Version 1.29.1 (2021-06-24)

# New Features / Improvements

- #1966 - @ajanikow - KIP-339: Add Incremental Config updates API
- #1964 - @ajanikow - Add DelegationToken ResourceType

# Fixes

- #1962 - @hanxiaolin - fix(consumer):  call interceptors when MaxProcessingTime expire
- #1971 - @KerryJava - fix  kafka-producer-performance throughput panic
- #1968 - @dnwe - chore: bump golang.org/x versions
- #1956 - @joewreschnig - Allow checking the entire `ProducerMessage` in the mock producers
- #1963 - @dnwe - fix: ensure backoff timer is re-used
- #1949 - @dnwe - fix: explicitly use uint64 for payload length

## Version 1.29.0 (2021-05-07)

### New Features / Improvements

- #1917 - @arkady-emelyanov - KIP-554: Add Broker-side SCRAM Config API
- #1869 - @wyndhblb - zstd: encode+decode performance improvements
- #1541 - @izolight - add String, (Un)MarshalText for acl types.
- #1921 - @bai - Add support for Kafka 2.8.0

### Fixes
- #1936 - @dnwe - fix(consumer): follow preferred broker
- #1933 - @ozzieba - Use gofork for encoding/asn1 to fix ASN errors during Kerberos authentication
- #1929 - @celrenheit - Handle isolation level in Offset(Request|Response) and require stable offset in FetchOffset(Request|Response)
- #1926 - @dnwe - fix: correct initial CodeQL findings
- #1925 - @bai - Test out CodeQL
- #1923 - @bestgopher - Remove redundant switch-case, fix doc typos
- #1922 - @bai - Update go dependencies
- #1898 - @mmaslankaprv - Parsing only known control batches value
- #1887 - @withshubh - Fix: issues affecting code quality

## Version 1.28.0 (2021-02-15)

**Note that with this release we change `RoundRobinBalancer` strategy to match Java client behavior. See #1788 for details.**

- #1870 - @kvch - Update Kerberos library to latest major
- #1876 - @bai - Update docs, reference pkg.go.dev
- #1846 - @wclaeys - Do not ignore Consumer.Offsets.AutoCommit.Enable config on Close
- #1747 - @XSAM - fix: mock sync producer does not handle the offset while sending messages
- #1863 - @bai - Add support for Kafka 2.7.0 + update lz4 and klauspost/compress dependencies
- #1788 - @kzinglzy - feat[balance_strategy]: announcing a new round robin balance strategy
- #1862 - @bai - Fix CI setenv permissions issues
- #1832 - @ilyakaznacheev - Update Godoc link to pkg.go.dev
- #1822 - @danp - KIP-392: Allow consumers to fetch from closest replica

## Version 1.27.2 (2020-10-21)

### Improvements

#1750 - @krantideep95 Adds missing mock responses for mocking consumer group

## Fixes

#1817 - reverts #1785 - Add private method to Client interface to prevent implementation

## Version 1.27.1 (2020-10-07)

### Improvements

#1775 - @d1egoaz - Adds a Producer Interceptor example
#1781 - @justin-chen - Refresh brokers given list of seed brokers
#1784 - @justin-chen - Add randomize seed broker method
#1790 - @d1egoaz - remove example binary
#1798 - @bai - Test against Go 1.15
#1785 - @justin-chen - Add private method to Client interface to prevent implementation
#1802 - @uvw - Support Go 1.13 error unwrapping

## Fixes

#1791 - @stanislavkozlovski - bump default version to 1.0.0

## Version 1.27.0 (2020-08-11)

### Improvements

#1466 - @rubenvp8510  - Expose kerberos fast negotiation configuration
#1695 - @KJTsanaktsidis - Use docker-compose to run the functional tests
#1699 - @wclaeys  - Consumer group support for manually comitting offsets
#1714 - @bai - Bump Go to version 1.14.3, golangci-lint to 1.27.0
#1726 - @d1egoaz - Include zstd on the functional tests
#1730 - @d1egoaz - KIP-42 Add producer and consumer interceptors
#1738 - @varun06 - fixed variable names that are named same as some std lib package names
#1741 - @varun06 - updated zstd dependency to latest v1.10.10
#1743 - @varun06 - Fixed declaration dependencies and other lint issues in code base
#1763 - @alrs - remove deprecated tls options from test
#1769 - @bai - Add support for Kafka 2.6.0

## Fixes

#1697 - @kvch - Use gofork for encoding/asn1 to fix ASN errors during Kerberos authentication
#1744 - @alrs  - Fix isBalanced Function Signature

## Version 1.26.4 (2020-05-19)

## Fixes

- #1701 - @d1egoaz - Set server name only for the current broker
- #1694 - @dnwe - testfix: set KAFKA_HEAP_OPTS for zk and kafka

## Version 1.26.3 (2020-05-07)

## Fixes

- #1692 - @d1egoaz - Set tls ServerName to fix issue: either ServerName or InsecureSkipVerify must be specified in the tls.Config

## Version 1.26.2 (2020-05-06)

## ⚠️ Known Issues

This release has been marked as not ready for production and may be unstable, please use v1.26.4.

### Improvements

- #1560 - @iyacontrol - add sync pool for gzip 1-9
- #1605 - @dnwe - feat: protocol support for V11 fetch w/ rackID
- #1617 - @sladkoff / @dwi-di / @random-dwi - Add support for alter/list partition reassignements APIs
- #1632 - @bai - Add support for Go 1.14
- #1640 - @random-dwi - Feature/fix list partition reassignments
- #1646 - @mimaison - Add DescribeLogDirs to admin client
- #1667 - @bai - Add support for kafka 2.5.0

## Fixes

- #1594 - @sladkoff - Sets ConfigEntry.Default flag in addition to the ConfigEntry.Source for Kafka versions > V1_1_0_0
- #1601 - @alrs - fix: remove use of testing.T.FailNow() inside goroutine
- #1602 - @d1egoaz - adds a note about consumer groups Consume method
- #1607 - @darklore - Fix memory leak when Broker.Open and Broker.Close called repeatedly
- #1613 - @wblakecaldwell - Updated "retrying" log message when BackoffFunc implemented
- #1614 - @alrs - produce_response.go: Remove Unused Functions
- #1619 - @alrs - tools/kafka-producer-performance: prune unused flag variables
- #1639 - @agriffaut - Handle errors with no message but error code
- #1643 - @kzinglzy - fix `config.net.keepalive`
- #1644 - @KJTsanaktsidis - Fix brokers continually allocating new Session IDs
- #1645 - @Stephan14 - Remove broker(s) which no longer exist in metadata
- #1650 - @lavoiesl - Return the response error in heartbeatLoop
- #1661 - @KJTsanaktsidis - Fix "broker received out of order sequence" when brokers die
- #1666 - @KevinJCross - Bugfix: Allow TLS connections to work over socks proxy.

## Version 1.26.1 (2020-02-04)

Improvements:
- Add requests-in-flight metric ([1539](https://github.com/IBM/sarama/pull/1539))
- Fix misleading example for cluster admin ([1595](https://github.com/IBM/sarama/pull/1595))
- Replace Travis with GitHub Actions, linters housekeeping ([1573](https://github.com/IBM/sarama/pull/1573))
- Allow BalanceStrategy to provide custom assignment data ([1592](https://github.com/IBM/sarama/pull/1592))

Bug Fixes:
- Adds back Consumer.Offsets.CommitInterval to fix API ([1590](https://github.com/IBM/sarama/pull/1590))
- Fix error message s/CommitInterval/AutoCommit.Interval ([1589](https://github.com/IBM/sarama/pull/1589))

## Version 1.26.0 (2020-01-24)

New Features:
- Enable zstd compression
  ([1574](https://github.com/IBM/sarama/pull/1574),
  [1582](https://github.com/IBM/sarama/pull/1582))
- Support headers in tools kafka-console-producer
  ([1549](https://github.com/IBM/sarama/pull/1549))

Improvements:
- Add SASL AuthIdentity to SASL frames (authzid)
  ([1585](https://github.com/IBM/sarama/pull/1585)).

Bug Fixes:
- Sending messages with ZStd compression enabled fails in multiple ways
  ([1252](https://github.com/IBM/sarama/issues/1252)).
- Use the broker for any admin on BrokerConfig
  ([1571](https://github.com/IBM/sarama/pull/1571)).
- Set DescribeConfigRequest Version field
  ([1576](https://github.com/IBM/sarama/pull/1576)).
- ConsumerGroup flooding logs with client/metadata update req
  ([1578](https://github.com/IBM/sarama/pull/1578)).
- MetadataRequest version in DescribeCluster
  ([1580](https://github.com/IBM/sarama/pull/1580)).
- Fix deadlock in consumer group handleError
  ([1581](https://github.com/IBM/sarama/pull/1581))
- Fill in the Fetch{Request,Response} protocol
  ([1582](https://github.com/IBM/sarama/pull/1582)).
- Retry topic request on ControllerNotAvailable
  ([1586](https://github.com/IBM/sarama/pull/1586)).

## Version 1.25.0 (2020-01-13)

New Features:
- Support TLS protocol in kafka-producer-performance
  ([1538](https://github.com/IBM/sarama/pull/1538)).
- Add support for kafka 2.4.0
  ([1552](https://github.com/IBM/sarama/pull/1552)).

Improvements:
- Allow the Consumer to disable auto-commit offsets
  ([1164](https://github.com/IBM/sarama/pull/1164)).
- Produce records with consistent timestamps
  ([1455](https://github.com/IBM/sarama/pull/1455)).

Bug Fixes:
- Fix incorrect SetTopicMetadata name mentions
  ([1534](https://github.com/IBM/sarama/pull/1534)).
- Fix client.tryRefreshMetadata Println
  ([1535](https://github.com/IBM/sarama/pull/1535)).
- Fix panic on calling updateMetadata on closed client
  ([1531](https://github.com/IBM/sarama/pull/1531)).
- Fix possible faulty metrics in TestFuncProducing
  ([1545](https://github.com/IBM/sarama/pull/1545)).

## Version 1.24.1 (2019-10-31)

New Features:
- Add DescribeLogDirs Request/Response pair
  ([1520](https://github.com/IBM/sarama/pull/1520)).

Bug Fixes:
- Fix ClusterAdmin returning invalid controller ID on DescribeCluster
  ([1518](https://github.com/IBM/sarama/pull/1518)).
- Fix issue with consumergroup not rebalancing when new partition is added
  ([1525](https://github.com/IBM/sarama/pull/1525)).
- Ensure consistent use of read/write deadlines
  ([1529](https://github.com/IBM/sarama/pull/1529)).

## Version 1.24.0 (2019-10-09)

New Features:
- Add sticky partition assignor
  ([1416](https://github.com/IBM/sarama/pull/1416)).
- Switch from cgo zstd package to pure Go implementation
  ([1477](https://github.com/IBM/sarama/pull/1477)).

Improvements:
- Allow creating ClusterAdmin from client
  ([1415](https://github.com/IBM/sarama/pull/1415)).
- Set KafkaVersion in ListAcls method
  ([1452](https://github.com/IBM/sarama/pull/1452)).
- Set request version in CreateACL ClusterAdmin method
  ([1458](https://github.com/IBM/sarama/pull/1458)).
- Set request version in DeleteACL ClusterAdmin method
  ([1461](https://github.com/IBM/sarama/pull/1461)).
- Handle missed error codes on TopicMetaDataRequest and GroupCoordinatorRequest
  ([1464](https://github.com/IBM/sarama/pull/1464)).
- Remove direct usage of gofork
  ([1465](https://github.com/IBM/sarama/pull/1465)).
- Add support for Go 1.13
  ([1478](https://github.com/IBM/sarama/pull/1478)).
- Improve behavior of NewMockListAclsResponse
  ([1481](https://github.com/IBM/sarama/pull/1481)).

Bug Fixes:
- Fix race condition in consumergroup example
  ([1434](https://github.com/IBM/sarama/pull/1434)).
- Fix brokerProducer goroutine leak
  ([1442](https://github.com/IBM/sarama/pull/1442)).
- Use released version of lz4 library
  ([1469](https://github.com/IBM/sarama/pull/1469)).
- Set correct version in MockDeleteTopicsResponse
  ([1484](https://github.com/IBM/sarama/pull/1484)).
- Fix CLI help message typo
  ([1494](https://github.com/IBM/sarama/pull/1494)).

Known Issues:
- Please **don't** use Zstd, as it doesn't work right now.
  See https://github.com/IBM/sarama/issues/1252

## Version 1.23.1 (2019-07-22)

Bug Fixes:
- Fix fetch delete bug record
  ([1425](https://github.com/IBM/sarama/pull/1425)).
- Handle SASL/OAUTHBEARER token rejection
  ([1428](https://github.com/IBM/sarama/pull/1428)).

## Version 1.23.0 (2019-07-02)

New Features:
- Add support for Kafka 2.3.0
  ([1418](https://github.com/IBM/sarama/pull/1418)).
- Add support for ListConsumerGroupOffsets v2
  ([1374](https://github.com/IBM/sarama/pull/1374)).
- Add support for DeleteConsumerGroup
  ([1417](https://github.com/IBM/sarama/pull/1417)).
- Add support for SASLVersion configuration
  ([1410](https://github.com/IBM/sarama/pull/1410)).
- Add kerberos support
  ([1366](https://github.com/IBM/sarama/pull/1366)).

Improvements:
- Improve sasl_scram_client example
  ([1406](https://github.com/IBM/sarama/pull/1406)).
- Fix shutdown and race-condition in consumer-group example
  ([1404](https://github.com/IBM/sarama/pull/1404)).
- Add support for error codes 77—81
  ([1397](https://github.com/IBM/sarama/pull/1397)).
- Pool internal objects allocated per message
  ([1385](https://github.com/IBM/sarama/pull/1385)).
- Reduce packet decoder allocations
  ([1373](https://github.com/IBM/sarama/pull/1373)).
- Support timeout when fetching metadata
  ([1359](https://github.com/IBM/sarama/pull/1359)).

Bug Fixes:
- Fix fetch size integer overflow
  ([1376](https://github.com/IBM/sarama/pull/1376)).
- Handle and log throttled FetchResponses
  ([1383](https://github.com/IBM/sarama/pull/1383)).
- Refactor misspelled word Resouce to Resource
  ([1368](https://github.com/IBM/sarama/pull/1368)).

## Version 1.22.1 (2019-04-29)

Improvements:
- Use zstd 1.3.8
  ([1350](https://github.com/IBM/sarama/pull/1350)).
- Add support for SaslHandshakeRequest v1
  ([1354](https://github.com/IBM/sarama/pull/1354)).

Bug Fixes:
- Fix V5 MetadataRequest nullable topics array
  ([1353](https://github.com/IBM/sarama/pull/1353)).
- Use a different SCRAM client for each broker connection
  ([1349](https://github.com/IBM/sarama/pull/1349)).
- Fix AllowAutoTopicCreation for MetadataRequest greater than v3
  ([1344](https://github.com/IBM/sarama/pull/1344)).

## Version 1.22.0 (2019-04-09)

New Features:
- Add Offline Replicas Operation to Client
  ([1318](https://github.com/IBM/sarama/pull/1318)).
- Allow using proxy when connecting to broker
  ([1326](https://github.com/IBM/sarama/pull/1326)).
- Implement ReadCommitted
  ([1307](https://github.com/IBM/sarama/pull/1307)).
- Add support for Kafka 2.2.0
  ([1331](https://github.com/IBM/sarama/pull/1331)).
- Add SASL SCRAM-SHA-512 and SCRAM-SHA-256 mechanismes
  ([1331](https://github.com/IBM/sarama/pull/1295)).

Improvements:
- Unregister all broker metrics on broker stop
  ([1232](https://github.com/IBM/sarama/pull/1232)).
- Add SCRAM authentication example
  ([1303](https://github.com/IBM/sarama/pull/1303)).
- Add consumergroup examples
  ([1304](https://github.com/IBM/sarama/pull/1304)).
- Expose consumer batch size metric
  ([1296](https://github.com/IBM/sarama/pull/1296)).
- Add TLS options to console producer and consumer
  ([1300](https://github.com/IBM/sarama/pull/1300)).
- Reduce client close bookkeeping
  ([1297](https://github.com/IBM/sarama/pull/1297)).
- Satisfy error interface in create responses
  ([1154](https://github.com/IBM/sarama/pull/1154)).
- Please lint gods
  ([1346](https://github.com/IBM/sarama/pull/1346)).

Bug Fixes:
- Fix multi consumer group instance crash
  ([1338](https://github.com/IBM/sarama/pull/1338)).
- Update lz4 to latest version
  ([1347](https://github.com/IBM/sarama/pull/1347)).
- Retry ErrNotCoordinatorForConsumer in new consumergroup session
  ([1231](https://github.com/IBM/sarama/pull/1231)).
- Fix cleanup error handler
  ([1332](https://github.com/IBM/sarama/pull/1332)).
- Fix rate condition in PartitionConsumer
  ([1156](https://github.com/IBM/sarama/pull/1156)).

## Version 1.21.0 (2019-02-24)

New Features:
- Add CreateAclRequest, DescribeAclRequest, DeleteAclRequest
  ([1236](https://github.com/IBM/sarama/pull/1236)).
- Add DescribeTopic, DescribeConsumerGroup, ListConsumerGroups, ListConsumerGroupOffsets admin requests
  ([1178](https://github.com/IBM/sarama/pull/1178)).
- Implement SASL/OAUTHBEARER
  ([1240](https://github.com/IBM/sarama/pull/1240)).

Improvements:
- Add Go mod support
  ([1282](https://github.com/IBM/sarama/pull/1282)).
- Add error codes 73—76
  ([1239](https://github.com/IBM/sarama/pull/1239)).
- Add retry backoff function
  ([1160](https://github.com/IBM/sarama/pull/1160)).
- Maintain metadata in the producer even when retries are disabled
  ([1189](https://github.com/IBM/sarama/pull/1189)).
- Include ReplicaAssignment in ListTopics
  ([1274](https://github.com/IBM/sarama/pull/1274)).
- Add producer performance tool
  ([1222](https://github.com/IBM/sarama/pull/1222)).
- Add support LogAppend timestamps
  ([1258](https://github.com/IBM/sarama/pull/1258)).

Bug Fixes:
- Fix potential deadlock when a heartbeat request fails
  ([1286](https://github.com/IBM/sarama/pull/1286)).
- Fix consuming compacted topic
  ([1227](https://github.com/IBM/sarama/pull/1227)).
- Set correct Kafka version for DescribeConfigsRequest v1
  ([1277](https://github.com/IBM/sarama/pull/1277)).
- Update kafka test version
  ([1273](https://github.com/IBM/sarama/pull/1273)).

## Version 1.20.1 (2019-01-10)

New Features:
- Add optional replica id in offset request
  ([1100](https://github.com/IBM/sarama/pull/1100)).

Improvements:
- Implement DescribeConfigs Request + Response v1 & v2
  ([1230](https://github.com/IBM/sarama/pull/1230)).
- Reuse compression objects
  ([1185](https://github.com/IBM/sarama/pull/1185)).
- Switch from png to svg for GoDoc link in README
  ([1243](https://github.com/IBM/sarama/pull/1243)).
- Fix typo in deprecation notice for FetchResponseBlock.Records
  ([1242](https://github.com/IBM/sarama/pull/1242)).
- Fix typos in consumer metadata response file
  ([1244](https://github.com/IBM/sarama/pull/1244)).

Bug Fixes:
- Revert to individual msg retries for non-idempotent
  ([1203](https://github.com/IBM/sarama/pull/1203)).
- Respect MaxMessageBytes limit for uncompressed messages
  ([1141](https://github.com/IBM/sarama/pull/1141)).

## Version 1.20.0 (2018-12-10)

New Features:
 - Add support for zstd compression
   ([#1170](https://github.com/IBM/sarama/pull/1170)).
 - Add support for Idempotent Producer
   ([#1152](https://github.com/IBM/sarama/pull/1152)).
 - Add support support for Kafka 2.1.0
   ([#1229](https://github.com/IBM/sarama/pull/1229)).
 - Add support support for OffsetCommit request/response pairs versions v1 to v5
   ([#1201](https://github.com/IBM/sarama/pull/1201)).
 - Add support support for OffsetFetch request/response pair up to version v5
   ([#1198](https://github.com/IBM/sarama/pull/1198)).

Improvements:
 - Export broker's Rack setting
   ([#1173](https://github.com/IBM/sarama/pull/1173)).
 - Always use latest patch version of Go on CI
   ([#1202](https://github.com/IBM/sarama/pull/1202)).
 - Add error codes 61 to 72
   ([#1195](https://github.com/IBM/sarama/pull/1195)).

Bug Fixes:
 - Fix build without cgo
   ([#1182](https://github.com/IBM/sarama/pull/1182)).
 - Fix go vet suggestion in consumer group file
   ([#1209](https://github.com/IBM/sarama/pull/1209)).
 - Fix typos in code and comments
   ([#1228](https://github.com/IBM/sarama/pull/1228)).

## Version 1.19.0 (2018-09-27)

New Features:
 - Implement a higher-level consumer group
   ([#1099](https://github.com/IBM/sarama/pull/1099)).

Improvements:
 - Add support for Go 1.11
   ([#1176](https://github.com/IBM/sarama/pull/1176)).

Bug Fixes:
 - Fix encoding of `MetadataResponse` with version 2 and higher
   ([#1174](https://github.com/IBM/sarama/pull/1174)).
 - Fix race condition in mock async producer
   ([#1174](https://github.com/IBM/sarama/pull/1174)).

## Version 1.18.0 (2018-09-07)

New Features:
 - Make `Partitioner.RequiresConsistency` vary per-message
   ([#1112](https://github.com/IBM/sarama/pull/1112)).
 - Add customizable partitioner
   ([#1118](https://github.com/IBM/sarama/pull/1118)).
 - Add `ClusterAdmin` support for `CreateTopic`, `DeleteTopic`, `CreatePartitions`,
   `DeleteRecords`, `DescribeConfig`, `AlterConfig`, `CreateACL`, `ListAcls`, `DeleteACL`
   ([#1055](https://github.com/IBM/sarama/pull/1055)).

Improvements:
 - Add support for Kafka 2.0.0
   ([#1149](https://github.com/IBM/sarama/pull/1149)).
 - Allow setting `LocalAddr` when dialing an address to support multi-homed hosts
   ([#1123](https://github.com/IBM/sarama/pull/1123)).
 - Simpler offset management
   ([#1127](https://github.com/IBM/sarama/pull/1127)).

Bug Fixes:
 - Fix mutation of `ProducerMessage.MetaData` when producing to Kafka
   ([#1110](https://github.com/IBM/sarama/pull/1110)).
 - Fix consumer block when response did not contain all the
   expected topic/partition blocks
   ([#1086](https://github.com/IBM/sarama/pull/1086)).
 - Fix consumer block when response contains only constrol messages
   ([#1115](https://github.com/IBM/sarama/pull/1115)).
 - Add timeout config for ClusterAdmin requests
   ([#1142](https://github.com/IBM/sarama/pull/1142)).
 - Add version check when producing message with headers
   ([#1117](https://github.com/IBM/sarama/pull/1117)).
 - Fix `MetadataRequest` for empty list of topics
   ([#1132](https://github.com/IBM/sarama/pull/1132)).
 - Fix producer topic metadata on-demand fetch when topic error happens in metadata response
   ([#1125](https://github.com/IBM/sarama/pull/1125)).

## Version 1.17.0 (2018-05-30)

New Features:
 - Add support for gzip compression levels
   ([#1044](https://github.com/IBM/sarama/pull/1044)).
 - Add support for Metadata request/response pairs versions v1 to v5
   ([#1047](https://github.com/IBM/sarama/pull/1047),
    [#1069](https://github.com/IBM/sarama/pull/1069)).
 - Add versioning to JoinGroup request/response pairs
   ([#1098](https://github.com/IBM/sarama/pull/1098))
 - Add support for CreatePartitions, DeleteGroups, DeleteRecords request/response pairs
   ([#1065](https://github.com/IBM/sarama/pull/1065),
    [#1096](https://github.com/IBM/sarama/pull/1096),
    [#1027](https://github.com/IBM/sarama/pull/1027)).
 - Add `Controller()` method to Client interface
   ([#1063](https://github.com/IBM/sarama/pull/1063)).

Improvements:
 - ConsumerMetadataReq/Resp has been migrated to FindCoordinatorReq/Resp
   ([#1010](https://github.com/IBM/sarama/pull/1010)).
 - Expose missing protocol parts: `msgSet` and `recordBatch`
   ([#1049](https://github.com/IBM/sarama/pull/1049)).
 - Add support for v1 DeleteTopics Request
   ([#1052](https://github.com/IBM/sarama/pull/1052)).
 - Add support for Go 1.10
   ([#1064](https://github.com/IBM/sarama/pull/1064)).
 - Claim support for Kafka 1.1.0
   ([#1073](https://github.com/IBM/sarama/pull/1073)).

Bug Fixes:
 - Fix FindCoordinatorResponse.encode to allow nil Coordinator
   ([#1050](https://github.com/IBM/sarama/pull/1050),
    [#1051](https://github.com/IBM/sarama/pull/1051)).
 - Clear all metadata when we have the latest topic info
   ([#1033](https://github.com/IBM/sarama/pull/1033)).
 - Make `PartitionConsumer.Close` idempotent
   ([#1092](https://github.com/IBM/sarama/pull/1092)).

## Version 1.16.0 (2018-02-12)

New Features:
 - Add support for the Create/Delete Topics request/response pairs
   ([#1007](https://github.com/IBM/sarama/pull/1007),
    [#1008](https://github.com/IBM/sarama/pull/1008)).
 - Add support for the Describe/Create/Delete ACL request/response pairs
   ([#1009](https://github.com/IBM/sarama/pull/1009)).
 - Add support for the five transaction-related request/response pairs
   ([#1016](https://github.com/IBM/sarama/pull/1016)).

Improvements:
 - Permit setting version on mock producer responses
   ([#999](https://github.com/IBM/sarama/pull/999)).
 - Add `NewMockBrokerListener` helper for testing TLS connections
   ([#1019](https://github.com/IBM/sarama/pull/1019)).
 - Changed the default value for `Consumer.Fetch.Default` from 32KiB to 1MiB
   which results in much higher throughput in most cases
   ([#1024](https://github.com/IBM/sarama/pull/1024)).
 - Reuse the `time.Ticker` across fetch requests in the PartitionConsumer to
   reduce CPU and memory usage when processing many partitions
   ([#1028](https://github.com/IBM/sarama/pull/1028)).
 - Assign relative offsets to messages in the producer to save the brokers a
   recompression pass
   ([#1002](https://github.com/IBM/sarama/pull/1002),
    [#1015](https://github.com/IBM/sarama/pull/1015)).

Bug Fixes:
 - Fix producing uncompressed batches with the new protocol format
   ([#1032](https://github.com/IBM/sarama/issues/1032)).
 - Fix consuming compacted topics with the new protocol format
   ([#1005](https://github.com/IBM/sarama/issues/1005)).
 - Fix consuming topics with a mix of protocol formats
   ([#1021](https://github.com/IBM/sarama/issues/1021)).
 - Fix consuming when the broker includes multiple batches in a single response
   ([#1022](https://github.com/IBM/sarama/issues/1022)).
 - Fix detection of `PartialTrailingMessage` when the partial message was
   truncated before the magic value indicating its version
   ([#1030](https://github.com/IBM/sarama/pull/1030)).
 - Fix expectation-checking in the mock of `SyncProducer.SendMessages`
   ([#1035](https://github.com/IBM/sarama/pull/1035)).

## Version 1.15.0 (2017-12-08)

New Features:
 - Claim official support for Kafka 1.0, though it did already work
   ([#984](https://github.com/IBM/sarama/pull/984)).
 - Helper methods for Kafka version numbers to/from strings
   ([#989](https://github.com/IBM/sarama/pull/989)).
 - Implement CreatePartitions request/response
   ([#985](https://github.com/IBM/sarama/pull/985)).

Improvements:
 - Add error codes 45-60
   ([#986](https://github.com/IBM/sarama/issues/986)).

Bug Fixes:
 - Fix slow consuming for certain Kafka 0.11/1.0 configurations
   ([#982](https://github.com/IBM/sarama/pull/982)).
 - Correctly determine when a FetchResponse contains the new message format
   ([#990](https://github.com/IBM/sarama/pull/990)).
 - Fix producing with multiple headers
   ([#996](https://github.com/IBM/sarama/pull/996)).
 - Fix handling of truncated record batches
   ([#998](https://github.com/IBM/sarama/pull/998)).
 - Fix leaking metrics when closing brokers
   ([#991](https://github.com/IBM/sarama/pull/991)).

## Version 1.14.0 (2017-11-13)

New Features:
 - Add support for the new Kafka 0.11 record-batch format, including the wire
   protocol and the necessary behavioural changes in the producer and consumer.
   Transactions and idempotency are not yet supported, but producing and
   consuming should work with all the existing bells and whistles (batching,
   compression, etc) as well as the new custom headers. Thanks to Vlad Hanciuta
   of Arista Networks for this work. Part of
   ([#901](https://github.com/IBM/sarama/issues/901)).

Bug Fixes:
 - Fix encoding of ProduceResponse versions in test
   ([#970](https://github.com/IBM/sarama/pull/970)).
 - Return partial replicas list when we have it
   ([#975](https://github.com/IBM/sarama/pull/975)).

## Version 1.13.0 (2017-10-04)

New Features:
 - Support for FetchRequest version 3
   ([#905](https://github.com/IBM/sarama/pull/905)).
 - Permit setting version on mock FetchResponses
   ([#939](https://github.com/IBM/sarama/pull/939)).
 - Add a configuration option to support storing only minimal metadata for
   extremely large clusters
   ([#937](https://github.com/IBM/sarama/pull/937)).
 - Add `PartitionOffsetManager.ResetOffset` for backtracking tracked offsets
   ([#932](https://github.com/IBM/sarama/pull/932)).

Improvements:
 - Provide the block-level timestamp when consuming compressed messages
   ([#885](https://github.com/IBM/sarama/issues/885)).
 - `Client.Replicas` and `Client.InSyncReplicas` now respect the order returned
   by the broker, which can be meaningful
   ([#930](https://github.com/IBM/sarama/pull/930)).
 - Use a `Ticker` to reduce consumer timer overhead at the cost of higher
   variance in the actual timeout
   ([#933](https://github.com/IBM/sarama/pull/933)).

Bug Fixes:
 - Gracefully handle messages with negative timestamps
   ([#907](https://github.com/IBM/sarama/pull/907)).
 - Raise a proper error when encountering an unknown message version
   ([#940](https://github.com/IBM/sarama/pull/940)).

## Version 1.12.0 (2017-05-08)

New Features:
 - Added support for the `ApiVersions` request and response pair, and Kafka
   version 0.10.2 ([#867](https://github.com/IBM/sarama/pull/867)). Note
   that you still need to specify the Kafka version in the Sarama configuration
   for the time being.
 - Added a `Brokers` method to the Client which returns the complete set of
   active brokers ([#813](https://github.com/IBM/sarama/pull/813)).
 - Added an `InSyncReplicas` method to the Client which returns the set of all
   in-sync broker IDs for the given partition, now that the Kafka versions for
   which this was misleading are no longer in our supported set
   ([#872](https://github.com/IBM/sarama/pull/872)).
 - Added a `NewCustomHashPartitioner` method which allows constructing a hash
   partitioner with a custom hash method in case the default (FNV-1a) is not
   suitable
   ([#837](https://github.com/IBM/sarama/pull/837),
    [#841](https://github.com/IBM/sarama/pull/841)).

Improvements:
 - Recognize more Kafka error codes
   ([#859](https://github.com/IBM/sarama/pull/859)).

Bug Fixes:
 - Fix an issue where decoding a malformed FetchRequest would not return the
   correct error ([#818](https://github.com/IBM/sarama/pull/818)).
 - Respect ordering of group protocols in JoinGroupRequests. This fix is
   transparent if you're using the `AddGroupProtocol` or
   `AddGroupProtocolMetadata` helpers; otherwise you will need to switch from
   the `GroupProtocols` field (now deprecated) to use `OrderedGroupProtocols`
   ([#812](https://github.com/IBM/sarama/issues/812)).
 - Fix an alignment-related issue with atomics on 32-bit architectures
   ([#859](https://github.com/IBM/sarama/pull/859)).

## Version 1.11.0 (2016-12-20)

_Important:_ As of Sarama 1.11 it is necessary to set the config value of
`Producer.Return.Successes` to true in order to use the SyncProducer. Previous
versions would silently override this value when instantiating a SyncProducer
which led to unexpected values and data races.

New Features:
 - Metrics! Thanks to Sébastien Launay for all his work on this feature
   ([#701](https://github.com/IBM/sarama/pull/701),
    [#746](https://github.com/IBM/sarama/pull/746),
    [#766](https://github.com/IBM/sarama/pull/766)).
 - Add support for LZ4 compression
   ([#786](https://github.com/IBM/sarama/pull/786)).
 - Add support for ListOffsetRequest v1 and Kafka 0.10.1
   ([#775](https://github.com/IBM/sarama/pull/775)).
 - Added a `HighWaterMarks` method to the Consumer which aggregates the
   `HighWaterMarkOffset` values of its child topic/partitions
   ([#769](https://github.com/IBM/sarama/pull/769)).

Bug Fixes:
 - Fixed producing when using timestamps, compression and Kafka 0.10
   ([#759](https://github.com/IBM/sarama/pull/759)).
 - Added missing decoder methods to DescribeGroups response
   ([#756](https://github.com/IBM/sarama/pull/756)).
 - Fix producer shutdown when `Return.Errors` is disabled
   ([#787](https://github.com/IBM/sarama/pull/787)).
 - Don't mutate configuration in SyncProducer
   ([#790](https://github.com/IBM/sarama/pull/790)).
 - Fix crash on SASL initialization failure
   ([#795](https://github.com/IBM/sarama/pull/795)).

## Version 1.10.1 (2016-08-30)

Bug Fixes:
 - Fix the documentation for `HashPartitioner` which was incorrect
   ([#717](https://github.com/IBM/sarama/pull/717)).
 - Permit client creation even when it is limited by ACLs
   ([#722](https://github.com/IBM/sarama/pull/722)).
 - Several fixes to the consumer timer optimization code, regressions introduced
   in v1.10.0. Go's timers are finicky
   ([#730](https://github.com/IBM/sarama/pull/730),
    [#733](https://github.com/IBM/sarama/pull/733),
    [#734](https://github.com/IBM/sarama/pull/734)).
 - Handle consuming compressed relative offsets with Kafka 0.10
   ([#735](https://github.com/IBM/sarama/pull/735)).

## Version 1.10.0 (2016-08-02)

_Important:_ As of Sarama 1.10 it is necessary to tell Sarama the version of
Kafka you are running against (via the `config.Version` value) in order to use
features that may not be compatible with old Kafka versions. If you don't
specify this value it will default to 0.8.2 (the minimum supported), and trying
to use more recent features (like the offset manager) will fail with an error.

_Also:_ The offset-manager's behaviour has been changed to match the upstream
java consumer (see [#705](https://github.com/IBM/sarama/pull/705) and
[#713](https://github.com/IBM/sarama/pull/713)). If you use the
offset-manager, please ensure that you are committing one *greater* than the
last consumed message offset or else you may end up consuming duplicate
messages.

New Features:
 - Support for Kafka 0.10
   ([#672](https://github.com/IBM/sarama/pull/672),
    [#678](https://github.com/IBM/sarama/pull/678),
    [#681](https://github.com/IBM/sarama/pull/681), and others).
 - Support for configuring the target Kafka version
   ([#676](https://github.com/IBM/sarama/pull/676)).
 - Batch producing support in the SyncProducer
   ([#677](https://github.com/IBM/sarama/pull/677)).
 - Extend producer mock to allow setting expectations on message contents
   ([#667](https://github.com/IBM/sarama/pull/667)).

Improvements:
 - Support `nil` compressed messages for deleting in compacted topics
   ([#634](https://github.com/IBM/sarama/pull/634)).
 - Pre-allocate decoding errors, greatly reducing heap usage and GC time against
   misbehaving brokers ([#690](https://github.com/IBM/sarama/pull/690)).
 - Re-use consumer expiry timers, removing one allocation per consumed message
   ([#707](https://github.com/IBM/sarama/pull/707)).

Bug Fixes:
 - Actually default the client ID to "sarama" like we say we do
   ([#664](https://github.com/IBM/sarama/pull/664)).
 - Fix a rare issue where `Client.Leader` could return the wrong error
   ([#685](https://github.com/IBM/sarama/pull/685)).
 - Fix a possible tight loop in the consumer
   ([#693](https://github.com/IBM/sarama/pull/693)).
 - Match upstream's offset-tracking behaviour
   ([#705](https://github.com/IBM/sarama/pull/705)).
 - Report UnknownTopicOrPartition errors from the offset manager
   ([#706](https://github.com/IBM/sarama/pull/706)).
 - Fix possible negative partition value from the HashPartitioner
   ([#709](https://github.com/IBM/sarama/pull/709)).

## Version 1.9.0 (2016-05-16)

New Features:
 - Add support for custom offset manager retention durations
   ([#602](https://github.com/IBM/sarama/pull/602)).
 - Publish low-level mocks to enable testing of third-party producer/consumer
   implementations ([#570](https://github.com/IBM/sarama/pull/570)).
 - Declare support for Golang 1.6
   ([#611](https://github.com/IBM/sarama/pull/611)).
 - Support for SASL plain-text auth
   ([#648](https://github.com/IBM/sarama/pull/648)).

Improvements:
 - Simplified broker locking scheme slightly
   ([#604](https://github.com/IBM/sarama/pull/604)).
 - Documentation cleanup
   ([#605](https://github.com/IBM/sarama/pull/605),
    [#621](https://github.com/IBM/sarama/pull/621),
    [#654](https://github.com/IBM/sarama/pull/654)).

Bug Fixes:
 - Fix race condition shutting down the OffsetManager
   ([#658](https://github.com/IBM/sarama/pull/658)).

## Version 1.8.0 (2016-02-01)

New Features:
 - Full support for Kafka 0.9:
   - All protocol messages and fields
   ([#586](https://github.com/IBM/sarama/pull/586),
   [#588](https://github.com/IBM/sarama/pull/588),
   [#590](https://github.com/IBM/sarama/pull/590)).
   - Verified that TLS support works
   ([#581](https://github.com/IBM/sarama/pull/581)).
   - Fixed the OffsetManager compatibility
   ([#585](https://github.com/IBM/sarama/pull/585)).

Improvements:
 - Optimize for fewer system calls when reading from the network
   ([#584](https://github.com/IBM/sarama/pull/584)).
 - Automatically retry `InvalidMessage` errors to match upstream behaviour
   ([#589](https://github.com/IBM/sarama/pull/589)).

## Version 1.7.0 (2015-12-11)

New Features:
 - Preliminary support for Kafka 0.9
   ([#572](https://github.com/IBM/sarama/pull/572)). This comes with several
   caveats:
   - Protocol-layer support is mostly in place
     ([#577](https://github.com/IBM/sarama/pull/577)), however Kafka 0.9
     renamed some messages and fields, which we did not in order to preserve API
     compatibility.
   - The producer and consumer work against 0.9, but the offset manager does
     not ([#573](https://github.com/IBM/sarama/pull/573)).
   - TLS support may or may not work
     ([#581](https://github.com/IBM/sarama/pull/581)).

Improvements:
 - Don't wait for request timeouts on dead brokers, greatly speeding recovery
   when the TCP connection is left hanging
   ([#548](https://github.com/IBM/sarama/pull/548)).
 - Refactored part of the producer. The new version provides a much more elegant
   solution to [#449](https://github.com/IBM/sarama/pull/449). It is also
   slightly more efficient, and much more precise in calculating batch sizes
   when compression is used
   ([#549](https://github.com/IBM/sarama/pull/549),
   [#550](https://github.com/IBM/sarama/pull/550),
   [#551](https://github.com/IBM/sarama/pull/551)).

Bug Fixes:
 - Fix race condition in consumer test mock
   ([#553](https://github.com/IBM/sarama/pull/553)).

## Version 1.6.1 (2015-09-25)

Bug Fixes:
 - Fix panic that could occur if a user-supplied message value failed to encode
   ([#449](https://github.com/IBM/sarama/pull/449)).

## Version 1.6.0 (2015-09-04)

New Features:
 - Implementation of a consumer offset manager using the APIs introduced in
   Kafka 0.8.2. The API is designed mainly for integration into a future
   high-level consumer, not for direct use, although it is *possible* to use it
   directly.
   ([#461](https://github.com/IBM/sarama/pull/461)).

Improvements:
 - CRC32 calculation is much faster on machines with SSE4.2 instructions,
   removing a major hotspot from most profiles
   ([#255](https://github.com/IBM/sarama/pull/255)).

Bug Fixes:
 - Make protocol decoding more robust against some malformed packets generated
   by go-fuzz ([#523](https://github.com/IBM/sarama/pull/523),
   [#525](https://github.com/IBM/sarama/pull/525)) or found in other ways
   ([#528](https://github.com/IBM/sarama/pull/528)).
 - Fix a potential race condition panic in the consumer on shutdown
   ([#529](https://github.com/IBM/sarama/pull/529)).

## Version 1.5.0 (2015-08-17)

New Features:
 - TLS-encrypted network connections are now supported. This feature is subject
   to change when Kafka releases built-in TLS support, but for now this is
   enough to work with TLS-terminating proxies
   ([#154](https://github.com/IBM/sarama/pull/154)).

Improvements:
 - The consumer will not block if a single partition is not drained by the user;
   all other partitions will continue to consume normally
   ([#485](https://github.com/IBM/sarama/pull/485)).
 - Formatting of error strings has been much improved
   ([#495](https://github.com/IBM/sarama/pull/495)).
 - Internal refactoring of the producer for code cleanliness and to enable
   future work ([#300](https://github.com/IBM/sarama/pull/300)).

Bug Fixes:
 - Fix a potential deadlock in the consumer on shutdown
   ([#475](https://github.com/IBM/sarama/pull/475)).

## Version 1.4.3 (2015-07-21)

Bug Fixes:
 - Don't include the partitioner in the producer's "fetch partitions"
   circuit-breaker ([#466](https://github.com/IBM/sarama/pull/466)).
 - Don't retry messages until the broker is closed when abandoning a broker in
   the producer ([#468](https://github.com/IBM/sarama/pull/468)).
 - Update the import path for snappy-go, it has moved again and the API has
   changed slightly ([#486](https://github.com/IBM/sarama/pull/486)).

## Version 1.4.2 (2015-05-27)

Bug Fixes:
 - Update the import path for snappy-go, it has moved from google code to github
   ([#456](https://github.com/IBM/sarama/pull/456)).

## Version 1.4.1 (2015-05-25)

Improvements:
 - Optimizations when decoding snappy messages, thanks to John Potocny
   ([#446](https://github.com/IBM/sarama/pull/446)).

Bug Fixes:
 - Fix hypothetical race conditions on producer shutdown
   ([#450](https://github.com/IBM/sarama/pull/450),
   [#451](https://github.com/IBM/sarama/pull/451)).

## Version 1.4.0 (2015-05-01)

New Features:
 - The consumer now implements `Topics()` and `Partitions()` methods to enable
   users to dynamically choose what topics/partitions to consume without
   instantiating a full client
   ([#431](https://github.com/IBM/sarama/pull/431)).
 - The partition-consumer now exposes the high water mark offset value returned
   by the broker via the `HighWaterMarkOffset()` method ([#339](https://github.com/IBM/sarama/pull/339)).
 - Added a `kafka-console-consumer` tool capable of handling multiple
   partitions, and deprecated the now-obsolete `kafka-console-partitionConsumer`
   ([#439](https://github.com/IBM/sarama/pull/439),
   [#442](https://github.com/IBM/sarama/pull/442)).

Improvements:
 - The producer's logging during retry scenarios is more consistent, more
   useful, and slightly less verbose
   ([#429](https://github.com/IBM/sarama/pull/429)).
 - The client now shuffles its initial list of seed brokers in order to prevent
   thundering herd on the first broker in the list
   ([#441](https://github.com/IBM/sarama/pull/441)).

Bug Fixes:
 - The producer now correctly manages its state if retries occur when it is
   shutting down, fixing several instances of confusing behaviour and at least
   one potential deadlock ([#419](https://github.com/IBM/sarama/pull/419)).
 - The consumer now handles messages for different partitions asynchronously,
   making it much more resilient to specific user code ordering
   ([#325](https://github.com/IBM/sarama/pull/325)).

## Version 1.3.0 (2015-04-16)

New Features:
 - The client now tracks consumer group coordinators using
   ConsumerMetadataRequests similar to how it tracks partition leadership using
   regular MetadataRequests ([#411](https://github.com/IBM/sarama/pull/411)).
   This adds two methods to the client API:
   - `Coordinator(consumerGroup string) (*Broker, error)`
   - `RefreshCoordinator(consumerGroup string) error`

Improvements:
 - ConsumerMetadataResponses now automatically create a Broker object out of the
   ID/address/port combination for the Coordinator; accessing the fields
   individually has been deprecated
   ([#413](https://github.com/IBM/sarama/pull/413)).
 - Much improved handling of `OffsetOutOfRange` errors in the consumer.
   Consumers will fail to start if the provided offset is out of range
   ([#418](https://github.com/IBM/sarama/pull/418))
   and they will automatically shut down if the offset falls out of range
   ([#424](https://github.com/IBM/sarama/pull/424)).
 - Small performance improvement in encoding and decoding protocol messages
   ([#427](https://github.com/IBM/sarama/pull/427)).

Bug Fixes:
 - Fix a rare race condition in the client's background metadata refresher if
   it happens to be activated while the client is being closed
   ([#422](https://github.com/IBM/sarama/pull/422)).

## Version 1.2.0 (2015-04-07)

Improvements:
 - The producer's behaviour when `Flush.Frequency` is set is now more intuitive
   ([#389](https://github.com/IBM/sarama/pull/389)).
 - The producer is now somewhat more memory-efficient during and after retrying
   messages due to an improved queue implementation
   ([#396](https://github.com/IBM/sarama/pull/396)).
 - The consumer produces much more useful logging output when leadership
   changes ([#385](https://github.com/IBM/sarama/pull/385)).
 - The client's `GetOffset` method will now automatically refresh metadata and
   retry once in the event of stale information or similar
   ([#394](https://github.com/IBM/sarama/pull/394)).
 - Broker connections now have support for using TCP keepalives
   ([#407](https://github.com/IBM/sarama/issues/407)).

Bug Fixes:
 - The OffsetCommitRequest message now correctly implements all three possible
   API versions ([#390](https://github.com/IBM/sarama/pull/390),
   [#400](https://github.com/IBM/sarama/pull/400)).

## Version 1.1.0 (2015-03-20)

Improvements:
 - Wrap the producer's partitioner call in a circuit-breaker so that repeatedly
   broken topics don't choke throughput
   ([#373](https://github.com/IBM/sarama/pull/373)).

Bug Fixes:
 - Fix the producer's internal reference counting in certain unusual scenarios
   ([#367](https://github.com/IBM/sarama/pull/367)).
 - Fix the consumer's internal reference counting in certain unusual scenarios
   ([#369](https://github.com/IBM/sarama/pull/369)).
 - Fix a condition where the producer's internal control messages could have
   gotten stuck ([#368](https://github.com/IBM/sarama/pull/368)).
 - Fix an issue where invalid partition lists would be cached when asking for
   metadata for a non-existant topic ([#372](https://github.com/IBM/sarama/pull/372)).


## Version 1.0.0 (2015-03-17)

Version 1.0.0 is the first tagged version, and is almost a complete rewrite. The primary differences with previous untagged versions are:

- The producer has been rewritten; there is now a `SyncProducer` with a blocking API, and an `AsyncProducer` that is non-blocking.
- The consumer has been rewritten to only open one connection per broker instead of one connection per partition.
- The main types of Sarama are now interfaces to make depedency injection easy; mock implementations for `Consumer`, `SyncProducer` and `AsyncProducer` are provided in the `github.com/IBM/sarama/mocks` package.
- For most uses cases, it is no longer necessary to open a `Client`; this will be done for you.
- All the configuration values have been unified in the `Config` struct.
- Much improved test suite.


================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity
and orientation.

We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.

## Our Standards

Examples of behavior that contributes to a positive environment for our
community include:

* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
  and learning from the experience
* Focusing on what is best not just for us as individuals, but for the
  overall community

Examples of unacceptable behavior include:

* The use of sexualized language or imagery, and sexual attention or
  advances of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email
  address, without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
  professional setting

## Enforcement Responsibilities

Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.

Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for moderation
decisions when appropriate.

## Scope

This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail address,
posting via an official social media account, or acting as an appointed
representative at an online or offline event.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
dominic.evans@uk.ibm.com.
All complaints will be reviewed and investigated promptly and fairly.

All community leaders are obligated to respect the privacy and security of the
reporter of any incident.

## Enforcement Guidelines

Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:

### 1. Correction

**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.

**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.

### 2. Warning

**Community Impact**: A violation through a single incident or series
of actions.

**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or
permanent ban.

### 3. Temporary Ban

**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.

**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited interaction
with those enforcing the Code of Conduct, is allowed during this period.
Violating these terms may lead to a permanent ban.

### 4. Permanent Ban

**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior,  harassment of an
individual, or aggression toward or disparagement of classes of individuals.

**Consequence**: A permanent ban from any sort of public interaction within
the community.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.

Community Impact Guidelines were inspired by [Mozilla's code of conduct
enforcement ladder](https://github.com/mozilla/diversity).

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.


================================================
FILE: CONTRIBUTING.md
================================================
# Contributing

[fork]: https://github.com/IBM/sarama/fork
[pr]: https://github.com/IBM/sarama/compare
[released]: https://help.github.com/articles/github-terms-of-service/#6-contributions-under-repository-license

Hi there! We are thrilled that you would like to contribute to Sarama.
Contributions are always welcome, both reporting issues and submitting pull requests!

## AI-Assistance

AI-assisted tools (e.g., code generation or language models) _may_ be used in the course of contributing issues and pull requests.
However, all contributions must meet the same standards as entirely human-written work and the use of AI should ideally be imperceptible.
You remain fully responsible for correctness, maintainability, security, style, and licensing compliance.
You may mention the tool or model that you used in your issue/PR description, but do _not_ include it in the Co-authored-by or Signed-off-by commit trailer.

AI assistance may be used when drafting issues, proposals, or discussion posts, but a human must remain fully in the loop and all AI-generated content must be reviewed, fact-checked, and edited _before_ submission.
Ensure your prompts steer it to remove unnecessary fluff, verbosity, filler and irrelevant content.

If you open a pull request you must be able to clearly explain what your changes do and how they alter the behaviour of Sarama without relying upon AI tools or prompting to roundtrip the reviewer's questions.
If you cannot confidently explain and defend your contribution during review, do not submit it until you can.
Submissions must be readable, consistent with the existing codebase, and free of fabricated APIs, references, or unnecessary complexity.

## Reporting issues

Please make sure to include any potentially useful information in the issue, so we can pinpoint the issue faster without going back and forth.

- What SHA of Sarama are you running? If this is not the latest SHA on the main branch, please try if the problem persists with the latest version.
- You can set `sarama.Logger` to a [log.Logger](http://golang.org/pkg/log/#Logger) instance to capture debug output. Please include it in your issue description.
- Also look at the logs of the Kafka broker you are connected to. If you see anything out of the ordinary, please include it.

Also, please include the following information about your environment, so we can help you faster:

- What version of Kafka are you using?
- What version of Go are you using?
- What are the values of your Producer/Consumer/Client configuration?

## Contributing a change

Contributions to this project are [released][released] to the public under the project's [opensource license](LICENSE.md).
By contributing to this project you agree to the [Developer Certificate of Origin](https://developercertificate.org/) (DCO).
The DCO was created by the Linux Kernel community and is a simple statement that you, as a contributor, wrote or otherwise have the legal right to contribute those changes.

Contributors must _sign-off_ that they adhere to these requirements by adding a `Signed-off-by` line to all commit messages with an email address that matches the commit author:

```
feat: this is my commit message

Signed-off-by: Random J Developer <random@developer.example.org>
```

Git even has a `-s` command line option to append this automatically to your
commit message:

```
$ git commit -s -m 'This is my commit message'
```

Because this library is in production use by many people and applications, we code review all additions.
To make the review process go as smooth as possible, please consider the following.

- If you plan to work on something major, please open an issue to discuss the design first.
- Don't break backwards compatibility. If you really have to, open an issue to discuss this first.
- Make sure to use the `go fmt` command to format your code according to the standards. Even better, set up your editor to do this for you when saving.
- Run [go vet](https://golang.org/cmd/vet/) to detect any suspicious constructs in your code that could be bugs.
- Explicitly handle all error return values. If you really want to ignore an error value, you can assign it to `_`. You can use [errcheck](https://github.com/kisielk/errcheck) to verify whether you have handled all errors.
- You may also want to run [golint](https://github.com/golang/lint) as well to detect style problems.
- Add tests that cover the changes you made. Make sure to run `go test` with the `-race` argument to test for race conditions.
- Make sure your code is supported by all the Go versions we support.
  You can rely on GitHub Actions for testing older Go versions.

## Submitting a pull request

0. [Fork][fork] and clone the repository
1. Create a new branch: `git checkout -b my-branch-name`
2. Make your change, push to your fork and [submit a pull request][pr]
3. Wait for your pull request to be reviewed and merged.

Here are a few things you can do that will increase the likelihood of your pull request being accepted:

- Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.
- Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).

## Further Reading

- [Developer Certificate of Origin versus Contributor License Agreements](https://julien.ponge.org/blog/developer-certificate-of-origin-versus-contributor-license-agreements/)
- [The most powerful contributor agreement](https://lwn.net/Articles/592503/)
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
- [GitHub Help](https://help.github.com)


================================================
FILE: Dockerfile.kafka
================================================
FROM registry.access.redhat.com/ubi9/ubi-minimal:9.7@sha256:83006d535923fcf1345067873524a3980316f51794f01d8655be55d6e9387183

USER root

RUN microdnf update -y \
 && microdnf install -y git gzip java-17-openjdk-headless tar tzdata-java \
 && microdnf reinstall -y tzdata \
 && microdnf clean all

ENV JAVA_HOME=/usr/lib/jvm/jre-17

# https://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html
# Ensure Java doesn't cache any dns results
RUN cd /etc/java/java-17-openjdk/*/conf/security \
 && sed -e '/networkaddress.cache.ttl/d' -e '/networkaddress.cache.negative.ttl/d' -i java.security \
 && echo 'networkaddress.cache.ttl=0' >> java.security \
 && echo 'networkaddress.cache.negative.ttl=0' >> java.security

ARG SCALA_VERSION="2.13"
ARG KAFKA_VERSION="3.9.1"

WORKDIR /tmp

# https://github.com/apache/kafka/blob/2e2b0a58eda3e677763af974a44a6aaa3c280214/tests/docker/Dockerfile#L77-L105
ARG KAFKA_MIRROR="https://s3-us-west-2.amazonaws.com/kafka-packages"
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN --mount=type=bind,target=.,rw=true \
    mkdir -p "/opt/kafka-${KAFKA_VERSION}" \
 && chmod a+rw "/opt/kafka-${KAFKA_VERSION}" \
 && curl -s "$KAFKA_MIRROR/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz" | tar xz --strip-components=1 -C "/opt/kafka-${KAFKA_VERSION}"

# older kafka versions depend upon jaxb-api being bundled with the JDK, but it
# was removed from Java 11 so work around that by including it in the kafka
# libs dir regardless
RUN curl -sLO "https://repo1.maven.org/maven2/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar" \
 && for DIR in /opt/kafka-*; do cp -v jaxb-api-2.3.0.jar $DIR/libs/ ; done \
 && rm -f jaxb-api-2.3.0.jar

# older kafka versions with the zookeeper 3.4.13/3.4.14 client aren't compatible with Java 17 so quietly bump them to 3.5.9
RUN if ! stat /opt/kafka-${KAFKA_VERSION}/libs/zookeeper-3.4.*.jar; then exit 0; fi ; \
    rm -f /opt/kafka-${KAFKA_VERSION}/libs/zookeeper-3.4.*.jar \
 && curl --fail -sSL -o "/opt/kafka-${KAFKA_VERSION}/libs/zookeeper-3.5.9.jar" "https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper/3.5.9/zookeeper-3.5.9.jar" \
 && curl --fail -sSL -o "/opt/kafka-${KAFKA_VERSION}/libs/zookeeper-jute-3.5.9.jar" "https://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper-jute/3.5.9/zookeeper-jute-3.5.9.jar"

WORKDIR /opt/kafka-${KAFKA_VERSION}

ENV JAVA_MAJOR_VERSION=17

RUN sed -e "s/JAVA_MAJOR_VERSION=.*/JAVA_MAJOR_VERSION=${JAVA_MAJOR_VERSION}/" -i"" ./bin/kafka-run-class.sh

COPY entrypoint.sh /

USER 65534:65534

ENTRYPOINT ["/entrypoint.sh"]


================================================
FILE: LICENSE.md
================================================
# MIT License

Copyright (c) 2013 Shopify

Copyright (c) 2023 IBM Corporation

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


================================================
FILE: Makefile
================================================
default: fmt get update test lint

GO       := go
GOBIN    := $(shell pwd)/bin
GOBUILD  := CGO_ENABLED=0 $(GO) build $(BUILD_FLAG)

GOTESTSUM         := $(GOBIN)/gotestsum
# renovate: datasource=github-releases depName=gotestyourself/gotestsum
GOTESTSUM_VERSION := v1.13.0
$(GOTESTSUM):
	GOBIN=$(GOBIN) go install gotest.tools/gotestsum@$(GOTESTSUM_VERSION)

TESTSTAT         := $(GOBIN)/teststat
# renovate: datasource=github-releases depName=vearutop/teststat
TESTSTAT_VERSION := v0.1.27
$(TESTSTAT):
	GOBIN=$(GOBIN) go install github.com/vearutop/teststat@$(TESTSTAT_VERSION)

FILES := $(shell find . -name '*.go' -type f -not -name '*.pb.go' -not -name '*_generated.go' -not -name '*_test.go')
TESTS := $(shell find . -name '*.go' -type f -not -name '*.pb.go' -not -name '*_generated.go' -name '*_test.go')

get:
	$(GO) get ./...
	$(GO) mod verify
	$(GO) mod tidy

update:
	$(GO) get -u -v ./...
	$(GO) mod verify
	$(GO) mod tidy

fmt:
	gofmt -s -l -w $(FILES) $(TESTS)

lint:
	GOFLAGS="-tags=functional" golangci-lint run

test: $(GOTESTSUM) $(TESTSTAT) $(TPARSE)
	@$(GOTESTSUM) $(if ${CI},--format github-actions,--format testdox) --jsonfile _test/unittests.json --junitfile _test/unittests.xml \
		--rerun-fails --packages="./..." \
		-- -v -race -coverprofile=profile.out -covermode=atomic -timeout 2m
	@$(TESTSTAT) _test/unittests.json

.PHONY: test_functional
test_functional: $(GOTESTSUM) $(TESTSTAT) $(TPARSE)
	@$(GOTESTSUM) $(if ${CI},--format github-actions,--format testdox) --jsonfile _test/fvt.json --junitfile _test/fvt.xml \
		--rerun-fails --packages="./..." \
		-- -v -race -coverprofile=profile.out -covermode=atomic -timeout 15m -tags=functional
	@$(TESTSTAT) _test/fvt.json


================================================
FILE: README.md
================================================
# sarama

[![Go Reference](https://pkg.go.dev/badge/github.com/IBM/sarama.svg)](https://pkg.go.dev/github.com/IBM/sarama)
[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/IBM/sarama/badge?style=flat)](https://securityscorecards.dev/viewer/?uri=github.com/IBM/sarama)
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/7996/badge)](https://www.bestpractices.dev/projects/7996)

Sarama is an MIT-licensed Go client library for [Apache Kafka](https://kafka.apache.org/).

## Getting started

- API documentation and examples are available via [pkg.go.dev](https://pkg.go.dev/github.com/IBM/sarama).
- Mocks for testing are available in the [mocks](./mocks) subpackage.
- The [examples](./examples) directory contains more elaborate example applications.
- The [tools](./tools) directory contains command line tools that can be useful for testing, diagnostics, and instrumentation.

You might also want to look at the [Frequently Asked Questions](https://github.com/IBM/sarama/wiki/Frequently-Asked-Questions).

## Compatibility and API stability

Sarama provides a "2 releases + 2 months" compatibility guarantee: we support
the two latest stable releases of Kafka and Go, and we provide a two month
grace period for older releases. However, older releases of Kafka are still likely to work.

Sarama follows semantic versioning and provides API stability via the standard Go
[module version numbering](https://go.dev/doc/modules/version-numbers) scheme.

A changelog is available [here](CHANGELOG.md).

## Contributing

- Get started by checking our [contribution guidelines](https://github.com/IBM/sarama/blob/main/CONTRIBUTING.md).
- Read the [Sarama wiki](https://github.com/IBM/sarama/wiki) for more technical and design details.
- The [Kafka Protocol Specification](https://kafka.apache.org/protocol.html) contains a wealth of useful information.
- For more general issues, there is [a google group](https://groups.google.com/forum/#!forum/kafka-clients) for Kafka client developers.
- If you have any questions, just ask!


================================================
FILE: SECURITY.md
================================================
# Security

## Reporting Security Issues

**Please do not report security vulnerabilities through public GitHub issues.**

The easiest way to report a security issue is privately through GitHub [here](https://github.com/IBM/sarama/security/advisories/new).

See [Privately reporting a security vulnerability](https://docs.github.com/en/code-security/security-advisories/guidance-on-reporting-and-writing/privately-reporting-a-security-vulnerability) for full instructions.

Alternatively, you can report them via e-mail or anonymous form to the IBM Product Security Incident Response Team (PSIRT) following the guidelines under the [IBM Security Vulnerability Management](https://www.ibm.com/support/pages/ibm-security-vulnerability-management) pages.


================================================
FILE: Vagrantfile
================================================
# We have 5 * 192MB ZK processes and 5 * 320MB Kafka processes => 2560MB
MEMORY = 3072

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/bionic64"

  config.vm.provision :shell, path: "vagrant/provision.sh"

  config.vm.network "private_network", ip: "192.168.100.67"

  config.vm.provider "virtualbox" do |v|
    v.memory = MEMORY
  end
end


================================================
FILE: acl_bindings.go
================================================
package sarama

// Resource holds information about acl resource type
type Resource struct {
	ResourceType        AclResourceType
	ResourceName        string
	ResourcePatternType AclResourcePatternType
}

func (r *Resource) encode(pe packetEncoder, version int16) error {
	pe.putInt8(int8(r.ResourceType))

	if err := pe.putString(r.ResourceName); err != nil {
		return err
	}

	if version == 1 {
		if r.ResourcePatternType == AclPatternUnknown {
			Logger.Print("Cannot encode an unknown resource pattern type, using Literal instead")
			r.ResourcePatternType = AclPatternLiteral
		}
		pe.putInt8(int8(r.ResourcePatternType))
	}

	return nil
}

func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
	resourceType, err := pd.getInt8()
	if err != nil {
		return err
	}
	r.ResourceType = AclResourceType(resourceType)

	if r.ResourceName, err = pd.getString(); err != nil {
		return err
	}
	if version == 1 {
		pattern, err := pd.getInt8()
		if err != nil {
			return err
		}
		r.ResourcePatternType = AclResourcePatternType(pattern)
	}

	return nil
}

// Acl holds information about acl type
type Acl struct {
	Principal      string
	Host           string
	Operation      AclOperation
	PermissionType AclPermissionType
}

func (a *Acl) encode(pe packetEncoder) error {
	if err := pe.putString(a.Principal); err != nil {
		return err
	}

	if err := pe.putString(a.Host); err != nil {
		return err
	}

	pe.putInt8(int8(a.Operation))
	pe.putInt8(int8(a.PermissionType))

	return nil
}

func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
	if a.Principal, err = pd.getString(); err != nil {
		return err
	}

	if a.Host, err = pd.getString(); err != nil {
		return err
	}

	operation, err := pd.getInt8()
	if err != nil {
		return err
	}
	a.Operation = AclOperation(operation)

	permissionType, err := pd.getInt8()
	if err != nil {
		return err
	}
	a.PermissionType = AclPermissionType(permissionType)

	return nil
}

// ResourceAcls is an acl resource type
type ResourceAcls struct {
	Resource
	Acls []*Acl
}

func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
	if err := r.Resource.encode(pe, version); err != nil {
		return err
	}

	if err := pe.putArrayLength(len(r.Acls)); err != nil {
		return err
	}
	for _, acl := range r.Acls {
		if err := acl.encode(pe); err != nil {
			return err
		}
	}

	return nil
}

func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {
	if err := r.Resource.decode(pd, version); err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	r.Acls = make([]*Acl, n)
	for i := 0; i < n; i++ {
		r.Acls[i] = new(Acl)
		if err := r.Acls[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}


================================================
FILE: acl_create_request.go
================================================
package sarama

// CreateAclsRequest is an acl creation request
type CreateAclsRequest struct {
	Version      int16
	AclCreations []*AclCreation
}

func (c *CreateAclsRequest) setVersion(v int16) {
	c.Version = v
}

func (c *CreateAclsRequest) encode(pe packetEncoder) error {
	if err := pe.putArrayLength(len(c.AclCreations)); err != nil {
		return err
	}

	for _, aclCreation := range c.AclCreations {
		if err := aclCreation.encode(pe, c.Version); err != nil {
			return err
		}
	}

	return nil
}

func (c *CreateAclsRequest) decode(pd packetDecoder, version int16) (err error) {
	c.Version = version
	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	c.AclCreations = make([]*AclCreation, n)

	for i := 0; i < n; i++ {
		c.AclCreations[i] = new(AclCreation)
		if err := c.AclCreations[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

func (c *CreateAclsRequest) key() int16 {
	return apiKeyCreateAcls
}

func (c *CreateAclsRequest) version() int16 {
	return c.Version
}

func (c *CreateAclsRequest) headerVersion() int16 {
	return 1
}

func (c *CreateAclsRequest) isValidVersion() bool {
	return c.Version >= 0 && c.Version <= 1
}

func (c *CreateAclsRequest) requiredVersion() KafkaVersion {
	switch c.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}

// AclCreation is a wrapper around Resource and Acl type
type AclCreation struct {
	Resource
	Acl
}

func (a *AclCreation) encode(pe packetEncoder, version int16) error {
	if err := a.Resource.encode(pe, version); err != nil {
		return err
	}
	if err := a.Acl.encode(pe); err != nil {
		return err
	}

	return nil
}

func (a *AclCreation) decode(pd packetDecoder, version int16) (err error) {
	if err := a.Resource.decode(pd, version); err != nil {
		return err
	}
	if err := a.Acl.decode(pd, version); err != nil {
		return err
	}

	return nil
}


================================================
FILE: acl_create_request_test.go
================================================
//go:build !functional

package sarama

import "testing"

var (
	aclCreateRequest = []byte{
		0, 0, 0, 1,
		3, // resource type = group
		0, 5, 'g', 'r', 'o', 'u', 'p',
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		2, // all
		2, // deny
	}
	aclCreateRequestv1 = []byte{
		0, 0, 0, 1,
		3, // resource type = group
		0, 5, 'g', 'r', 'o', 'u', 'p',
		3, // resource pattern type = literal
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		2, // all
		2, // deny
	}
)

func TestCreateAclsRequestv0(t *testing.T) {
	req := &CreateAclsRequest{
		Version: 0,
		AclCreations: []*AclCreation{
			{
				Resource: Resource{
					ResourceType: AclResourceGroup,
					ResourceName: "group",
				},
				Acl: Acl{
					Principal:      "principal",
					Host:           "host",
					Operation:      AclOperationAll,
					PermissionType: AclPermissionDeny,
				},
			},
		},
	}

	testRequest(t, "create request", req, aclCreateRequest)
}

func TestCreateAclsRequestv1(t *testing.T) {
	req := &CreateAclsRequest{
		Version: 1,
		AclCreations: []*AclCreation{
			{
				Resource: Resource{
					ResourceType:        AclResourceGroup,
					ResourceName:        "group",
					ResourcePatternType: AclPatternLiteral,
				},
				Acl: Acl{
					Principal:      "principal",
					Host:           "host",
					Operation:      AclOperationAll,
					PermissionType: AclPermissionDeny,
				},
			},
		},
	}

	testRequest(t, "create request v1", req, aclCreateRequestv1)
}


================================================
FILE: acl_create_response.go
================================================
package sarama

import "time"

// CreateAclsResponse is a an acl response creation type
type CreateAclsResponse struct {
	Version              int16
	ThrottleTime         time.Duration
	AclCreationResponses []*AclCreationResponse
}

func (c *CreateAclsResponse) setVersion(v int16) {
	c.Version = v
}

func (c *CreateAclsResponse) encode(pe packetEncoder) error {
	pe.putDurationMs(c.ThrottleTime)

	if err := pe.putArrayLength(len(c.AclCreationResponses)); err != nil {
		return err
	}

	for _, aclCreationResponse := range c.AclCreationResponses {
		if err := aclCreationResponse.encode(pe); err != nil {
			return err
		}
	}

	return nil
}

func (c *CreateAclsResponse) decode(pd packetDecoder, version int16) (err error) {
	c.ThrottleTime, err = pd.getDurationMs()
	if err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	c.AclCreationResponses = make([]*AclCreationResponse, n)
	for i := 0; i < n; i++ {
		c.AclCreationResponses[i] = new(AclCreationResponse)
		if err := c.AclCreationResponses[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

func (c *CreateAclsResponse) key() int16 {
	return apiKeyCreateAcls
}

func (c *CreateAclsResponse) version() int16 {
	return c.Version
}

func (c *CreateAclsResponse) headerVersion() int16 {
	return 0
}

func (c *CreateAclsResponse) isValidVersion() bool {
	return c.Version >= 0 && c.Version <= 1
}

func (c *CreateAclsResponse) requiredVersion() KafkaVersion {
	switch c.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}

func (r *CreateAclsResponse) throttleTime() time.Duration {
	return r.ThrottleTime
}

// AclCreationResponse is an acl creation response type
type AclCreationResponse struct {
	Err    KError
	ErrMsg *string
}

func (a *AclCreationResponse) encode(pe packetEncoder) error {
	pe.putKError(a.Err)

	if err := pe.putNullableString(a.ErrMsg); err != nil {
		return err
	}

	return nil
}

func (a *AclCreationResponse) decode(pd packetDecoder, version int16) (err error) {
	a.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	if a.ErrMsg, err = pd.getNullableString(); err != nil {
		return err
	}

	return nil
}


================================================
FILE: acl_create_response_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
	"time"
)

var (
	createResponseWithError = []byte{
		0, 0, 0, 100,
		0, 0, 0, 1,
		0, 42,
		0, 5, 'e', 'r', 'r', 'o', 'r',
	}

	createResponseArray = []byte{
		0, 0, 0, 100,
		0, 0, 0, 2,
		0, 42,
		0, 5, 'e', 'r', 'r', 'o', 'r',
		0, 0,
		255, 255,
	}
)

func TestCreateAclsResponse(t *testing.T) {
	errmsg := "error"
	resp := &CreateAclsResponse{
		ThrottleTime: 100 * time.Millisecond,
		AclCreationResponses: []*AclCreationResponse{{
			Err:    ErrInvalidRequest,
			ErrMsg: &errmsg,
		}},
	}

	testResponse(t, "response with error", resp, createResponseWithError)

	resp.AclCreationResponses = append(resp.AclCreationResponses, new(AclCreationResponse))

	testResponse(t, "response array", resp, createResponseArray)
}


================================================
FILE: acl_delete_request.go
================================================
package sarama

// DeleteAclsRequest is a delete acl request
type DeleteAclsRequest struct {
	Version int
	Filters []*AclFilter
}

func (d *DeleteAclsRequest) setVersion(v int16) {
	d.Version = int(v)
}

func (d *DeleteAclsRequest) encode(pe packetEncoder) error {
	if err := pe.putArrayLength(len(d.Filters)); err != nil {
		return err
	}

	for _, filter := range d.Filters {
		filter.Version = d.Version
		if err := filter.encode(pe); err != nil {
			return err
		}
	}

	return nil
}

func (d *DeleteAclsRequest) decode(pd packetDecoder, version int16) (err error) {
	d.Version = int(version)
	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	d.Filters = make([]*AclFilter, n)
	for i := 0; i < n; i++ {
		d.Filters[i] = new(AclFilter)
		d.Filters[i].Version = int(version)
		if err := d.Filters[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

func (d *DeleteAclsRequest) key() int16 {
	return apiKeyDeleteAcls
}

func (d *DeleteAclsRequest) version() int16 {
	return int16(d.Version)
}

func (d *DeleteAclsRequest) headerVersion() int16 {
	return 1
}

func (d *DeleteAclsRequest) isValidVersion() bool {
	return d.Version >= 0 && d.Version <= 1
}

func (d *DeleteAclsRequest) requiredVersion() KafkaVersion {
	switch d.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}


================================================
FILE: acl_delete_request_test.go
================================================
//go:build !functional

package sarama

import "testing"

var (
	aclDeleteRequestNullsv1 = []byte{
		0, 0, 0, 1,
		1,
		255, 255,
		1, // Any
		255, 255,
		255, 255,
		11,
		3,
	}

	aclDeleteRequestv1 = []byte{
		0, 0, 0, 1,
		1, // any
		0, 6, 'f', 'i', 'l', 't', 'e', 'r',
		1, // Any Filter
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		4, // write
		3, // allow
	}

	aclDeleteRequestNulls = []byte{
		0, 0, 0, 1,
		1,
		255, 255,
		255, 255,
		255, 255,
		11,
		3,
	}

	aclDeleteRequest = []byte{
		0, 0, 0, 1,
		1, // any
		0, 6, 'f', 'i', 'l', 't', 'e', 'r',
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		4, // write
		3, // allow
	}

	aclDeleteRequestArray = []byte{
		0, 0, 0, 2,
		1,
		0, 6, 'f', 'i', 'l', 't', 'e', 'r',
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		4, // write
		3, // allow
		2,
		0, 5, 't', 'o', 'p', 'i', 'c',
		255, 255,
		255, 255,
		6,
		2,
	}
)

func TestDeleteAclsRequest(t *testing.T) {
	req := &DeleteAclsRequest{
		Filters: []*AclFilter{{
			ResourceType:   AclResourceAny,
			Operation:      AclOperationAlterConfigs,
			PermissionType: AclPermissionAllow,
		}},
	}

	testRequest(t, "delete request nulls", req, aclDeleteRequestNulls)

	req.Filters[0].ResourceName = nullString("filter")
	req.Filters[0].Principal = nullString("principal")
	req.Filters[0].Host = nullString("host")
	req.Filters[0].Operation = AclOperationWrite

	testRequest(t, "delete request", req, aclDeleteRequest)

	req.Filters = append(req.Filters, &AclFilter{
		ResourceType:   AclResourceTopic,
		ResourceName:   nullString("topic"),
		Operation:      AclOperationDelete,
		PermissionType: AclPermissionDeny,
	})

	testRequest(t, "delete request array", req, aclDeleteRequestArray)
}

func TestDeleteAclsRequestV1(t *testing.T) {
	req := &DeleteAclsRequest{
		Version: 1,
		Filters: []*AclFilter{{
			ResourceType:              AclResourceAny,
			Operation:                 AclOperationAlterConfigs,
			PermissionType:            AclPermissionAllow,
			ResourcePatternTypeFilter: AclPatternAny,
		}},
	}

	testRequest(t, "delete request nulls", req, aclDeleteRequestNullsv1)

	req.Filters[0].ResourceName = nullString("filter")
	req.Filters[0].Principal = nullString("principal")
	req.Filters[0].Host = nullString("host")
	req.Filters[0].Operation = AclOperationWrite

	testRequest(t, "delete request", req, aclDeleteRequestv1)
}


================================================
FILE: acl_delete_response.go
================================================
package sarama

import "time"

// DeleteAclsResponse is a delete acl response
type DeleteAclsResponse struct {
	Version         int16
	ThrottleTime    time.Duration
	FilterResponses []*FilterResponse
}

func (d *DeleteAclsResponse) setVersion(v int16) {
	d.Version = v
}

func (d *DeleteAclsResponse) encode(pe packetEncoder) error {
	pe.putDurationMs(d.ThrottleTime)

	if err := pe.putArrayLength(len(d.FilterResponses)); err != nil {
		return err
	}

	for _, filterResponse := range d.FilterResponses {
		if err := filterResponse.encode(pe, d.Version); err != nil {
			return err
		}
	}

	return nil
}

func (d *DeleteAclsResponse) decode(pd packetDecoder, version int16) (err error) {
	if d.ThrottleTime, err = pd.getDurationMs(); err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}
	d.FilterResponses = make([]*FilterResponse, n)

	for i := 0; i < n; i++ {
		d.FilterResponses[i] = new(FilterResponse)
		if err := d.FilterResponses[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

func (d *DeleteAclsResponse) key() int16 {
	return apiKeyDeleteAcls
}

func (d *DeleteAclsResponse) version() int16 {
	return d.Version
}

func (d *DeleteAclsResponse) headerVersion() int16 {
	return 0
}

func (d *DeleteAclsResponse) isValidVersion() bool {
	return d.Version >= 0 && d.Version <= 1
}

func (d *DeleteAclsResponse) requiredVersion() KafkaVersion {
	switch d.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}

func (r *DeleteAclsResponse) throttleTime() time.Duration {
	return r.ThrottleTime
}

// FilterResponse is a filter response type
type FilterResponse struct {
	Err          KError
	ErrMsg       *string
	MatchingAcls []*MatchingAcl
}

func (f *FilterResponse) encode(pe packetEncoder, version int16) error {
	pe.putKError(f.Err)
	if err := pe.putNullableString(f.ErrMsg); err != nil {
		return err
	}

	if err := pe.putArrayLength(len(f.MatchingAcls)); err != nil {
		return err
	}
	for _, matchingAcl := range f.MatchingAcls {
		if err := matchingAcl.encode(pe, version); err != nil {
			return err
		}
	}

	return nil
}

func (f *FilterResponse) decode(pd packetDecoder, version int16) (err error) {
	f.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	if f.ErrMsg, err = pd.getNullableString(); err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}
	f.MatchingAcls = make([]*MatchingAcl, n)
	for i := 0; i < n; i++ {
		f.MatchingAcls[i] = new(MatchingAcl)
		if err := f.MatchingAcls[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

// MatchingAcl is a matching acl type
type MatchingAcl struct {
	Err    KError
	ErrMsg *string
	Resource
	Acl
}

func (m *MatchingAcl) encode(pe packetEncoder, version int16) error {
	pe.putKError(m.Err)
	if err := pe.putNullableString(m.ErrMsg); err != nil {
		return err
	}

	if err := m.Resource.encode(pe, version); err != nil {
		return err
	}

	if err := m.Acl.encode(pe); err != nil {
		return err
	}

	return nil
}

func (m *MatchingAcl) decode(pd packetDecoder, version int16) (err error) {
	m.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	if m.ErrMsg, err = pd.getNullableString(); err != nil {
		return err
	}

	if err := m.Resource.decode(pd, version); err != nil {
		return err
	}

	if err := m.Acl.decode(pd, version); err != nil {
		return err
	}

	return nil
}


================================================
FILE: acl_delete_response_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
	"time"
)

var deleteAclsResponse = []byte{
	0, 0, 0, 100,
	0, 0, 0, 1,
	0, 0, // no error
	255, 255, // no error message
	0, 0, 0, 1, // 1 matching acl
	0, 0, // no error
	255, 255, // no error message
	2, // resource type
	0, 5, 't', 'o', 'p', 'i', 'c',
	0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
	0, 4, 'h', 'o', 's', 't',
	4,
	3,
}

func TestDeleteAclsResponse(t *testing.T) {
	resp := &DeleteAclsResponse{
		ThrottleTime: 100 * time.Millisecond,
		FilterResponses: []*FilterResponse{{
			MatchingAcls: []*MatchingAcl{{
				Resource: Resource{ResourceType: AclResourceTopic, ResourceName: "topic"},
				Acl:      Acl{Principal: "principal", Host: "host", Operation: AclOperationWrite, PermissionType: AclPermissionAllow},
			}},
		}},
	}

	testResponse(t, "", resp, deleteAclsResponse)
}


================================================
FILE: acl_describe_request.go
================================================
package sarama

// DescribeAclsRequest is a describe acl request type
type DescribeAclsRequest struct {
	Version int
	AclFilter
}

func (d *DescribeAclsRequest) setVersion(v int16) {
	d.Version = int(v)
}

func (d *DescribeAclsRequest) encode(pe packetEncoder) error {
	d.AclFilter.Version = d.Version
	return d.AclFilter.encode(pe)
}

func (d *DescribeAclsRequest) decode(pd packetDecoder, version int16) (err error) {
	d.Version = int(version)
	d.AclFilter.Version = int(version)
	return d.AclFilter.decode(pd, version)
}

func (d *DescribeAclsRequest) key() int16 {
	return apiKeyDescribeAcls
}

func (d *DescribeAclsRequest) version() int16 {
	return int16(d.Version)
}

func (d *DescribeAclsRequest) headerVersion() int16 {
	return 1
}

func (d *DescribeAclsRequest) isValidVersion() bool {
	return d.Version >= 0 && d.Version <= 1
}

func (d *DescribeAclsRequest) requiredVersion() KafkaVersion {
	switch d.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}


================================================
FILE: acl_describe_request_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
)

var (
	aclDescribeRequest = []byte{
		2, // resource type
		0, 5, 't', 'o', 'p', 'i', 'c',
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		5, // acl operation
		3, // acl permission type
	}
	aclDescribeRequestV1 = []byte{
		2, // resource type
		0, 5, 't', 'o', 'p', 'i', 'c',
		1, // any Type
		0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
		0, 4, 'h', 'o', 's', 't',
		5, // acl operation
		3, // acl permission type
	}
)

func TestAclDescribeRequestV0(t *testing.T) {
	resourcename := "topic"
	principal := "principal"
	host := "host"

	req := &DescribeAclsRequest{
		AclFilter: AclFilter{
			ResourceType:   AclResourceTopic,
			ResourceName:   &resourcename,
			Principal:      &principal,
			Host:           &host,
			Operation:      AclOperationCreate,
			PermissionType: AclPermissionAllow,
		},
	}

	testRequest(t, "", req, aclDescribeRequest)
}

func TestAclDescribeRequestV1(t *testing.T) {
	resourcename := "topic"
	principal := "principal"
	host := "host"

	req := &DescribeAclsRequest{
		Version: 1,
		AclFilter: AclFilter{
			ResourceType:              AclResourceTopic,
			ResourceName:              &resourcename,
			ResourcePatternTypeFilter: AclPatternAny,
			Principal:                 &principal,
			Host:                      &host,
			Operation:                 AclOperationCreate,
			PermissionType:            AclPermissionAllow,
		},
	}

	testRequest(t, "", req, aclDescribeRequestV1)
}


================================================
FILE: acl_describe_response.go
================================================
package sarama

import "time"

// DescribeAclsResponse is a describe acl response type
type DescribeAclsResponse struct {
	Version      int16
	ThrottleTime time.Duration
	Err          KError
	ErrMsg       *string
	ResourceAcls []*ResourceAcls
}

func (d *DescribeAclsResponse) setVersion(v int16) {
	d.Version = v
}

func (d *DescribeAclsResponse) encode(pe packetEncoder) error {
	pe.putDurationMs(d.ThrottleTime)
	pe.putKError(d.Err)

	if err := pe.putNullableString(d.ErrMsg); err != nil {
		return err
	}

	if err := pe.putArrayLength(len(d.ResourceAcls)); err != nil {
		return err
	}

	for _, resourceAcl := range d.ResourceAcls {
		if err := resourceAcl.encode(pe, d.Version); err != nil {
			return err
		}
	}

	return nil
}

func (d *DescribeAclsResponse) decode(pd packetDecoder, version int16) (err error) {
	if d.ThrottleTime, err = pd.getDurationMs(); err != nil {
		return err
	}

	d.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	errmsg, err := pd.getString()
	if err != nil {
		return err
	}
	if errmsg != "" {
		d.ErrMsg = &errmsg
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}
	d.ResourceAcls = make([]*ResourceAcls, n)

	for i := 0; i < n; i++ {
		d.ResourceAcls[i] = new(ResourceAcls)
		if err := d.ResourceAcls[i].decode(pd, version); err != nil {
			return err
		}
	}

	return nil
}

func (d *DescribeAclsResponse) key() int16 {
	return apiKeyDescribeAcls
}

func (d *DescribeAclsResponse) version() int16 {
	return d.Version
}

func (d *DescribeAclsResponse) headerVersion() int16 {
	return 0
}

func (d *DescribeAclsResponse) isValidVersion() bool {
	return d.Version >= 0 && d.Version <= 1
}

func (d *DescribeAclsResponse) requiredVersion() KafkaVersion {
	switch d.Version {
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}

func (r *DescribeAclsResponse) throttleTime() time.Duration {
	return r.ThrottleTime
}


================================================
FILE: acl_describe_response_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
	"time"
)

var aclDescribeResponseError = []byte{
	0, 0, 0, 100,
	0, 8, // error
	0, 5, 'e', 'r', 'r', 'o', 'r',
	0, 0, 0, 1, // 1 resource
	2, // cluster type
	0, 5, 't', 'o', 'p', 'i', 'c',
	0, 0, 0, 1, // 1 acl
	0, 9, 'p', 'r', 'i', 'n', 'c', 'i', 'p', 'a', 'l',
	0, 4, 'h', 'o', 's', 't',
	4, // write
	3, // allow
}

func TestAclDescribeResponse(t *testing.T) {
	errmsg := "error"
	resp := &DescribeAclsResponse{
		ThrottleTime: 100 * time.Millisecond,
		Err:          ErrBrokerNotAvailable,
		ErrMsg:       &errmsg,
		ResourceAcls: []*ResourceAcls{{
			Resource: Resource{
				ResourceName: "topic",
				ResourceType: AclResourceTopic,
			},
			Acls: []*Acl{
				{
					Principal:      "principal",
					Host:           "host",
					Operation:      AclOperationWrite,
					PermissionType: AclPermissionAllow,
				},
			},
		}},
	}

	testResponse(t, "describe", resp, aclDescribeResponseError)
}


================================================
FILE: acl_filter.go
================================================
package sarama

type AclFilter struct {
	Version                   int
	ResourceType              AclResourceType
	ResourceName              *string
	ResourcePatternTypeFilter AclResourcePatternType
	Principal                 *string
	Host                      *string
	Operation                 AclOperation
	PermissionType            AclPermissionType
}

func (a *AclFilter) encode(pe packetEncoder) error {
	pe.putInt8(int8(a.ResourceType))
	if err := pe.putNullableString(a.ResourceName); err != nil {
		return err
	}

	if a.Version == 1 {
		pe.putInt8(int8(a.ResourcePatternTypeFilter))
	}

	if err := pe.putNullableString(a.Principal); err != nil {
		return err
	}
	if err := pe.putNullableString(a.Host); err != nil {
		return err
	}
	pe.putInt8(int8(a.Operation))
	pe.putInt8(int8(a.PermissionType))

	return nil
}

func (a *AclFilter) decode(pd packetDecoder, version int16) (err error) {
	resourceType, err := pd.getInt8()
	if err != nil {
		return err
	}
	a.ResourceType = AclResourceType(resourceType)

	if a.ResourceName, err = pd.getNullableString(); err != nil {
		return err
	}

	if a.Version == 1 {
		pattern, err := pd.getInt8()
		if err != nil {
			return err
		}

		a.ResourcePatternTypeFilter = AclResourcePatternType(pattern)
	}

	if a.Principal, err = pd.getNullableString(); err != nil {
		return err
	}

	if a.Host, err = pd.getNullableString(); err != nil {
		return err
	}

	operation, err := pd.getInt8()
	if err != nil {
		return err
	}
	a.Operation = AclOperation(operation)

	permissionType, err := pd.getInt8()
	if err != nil {
		return err
	}
	a.PermissionType = AclPermissionType(permissionType)

	return nil
}


================================================
FILE: acl_types.go
================================================
package sarama

import (
	"fmt"
	"strings"
)

type (
	AclOperation int

	AclPermissionType int

	AclResourceType int

	AclResourcePatternType int
)

// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclOperation.java
const (
	AclOperationUnknown AclOperation = iota
	AclOperationAny
	AclOperationAll
	AclOperationRead
	AclOperationWrite
	AclOperationCreate
	AclOperationDelete
	AclOperationAlter
	AclOperationDescribe
	AclOperationClusterAction
	AclOperationDescribeConfigs
	AclOperationAlterConfigs
	AclOperationIdempotentWrite
)

func (a *AclOperation) String() string {
	mapping := map[AclOperation]string{
		AclOperationUnknown:         "Unknown",
		AclOperationAny:             "Any",
		AclOperationAll:             "All",
		AclOperationRead:            "Read",
		AclOperationWrite:           "Write",
		AclOperationCreate:          "Create",
		AclOperationDelete:          "Delete",
		AclOperationAlter:           "Alter",
		AclOperationDescribe:        "Describe",
		AclOperationClusterAction:   "ClusterAction",
		AclOperationDescribeConfigs: "DescribeConfigs",
		AclOperationAlterConfigs:    "AlterConfigs",
		AclOperationIdempotentWrite: "IdempotentWrite",
	}
	s, ok := mapping[*a]
	if !ok {
		s = mapping[AclOperationUnknown]
	}
	return s
}

// MarshalText returns the text form of the AclOperation (name without prefix)
func (a *AclOperation) MarshalText() ([]byte, error) {
	return []byte(a.String()), nil
}

// UnmarshalText takes a text representation of the operation and converts it to an AclOperation
func (a *AclOperation) UnmarshalText(text []byte) error {
	normalized := strings.ToLower(string(text))
	mapping := map[string]AclOperation{
		"unknown":         AclOperationUnknown,
		"any":             AclOperationAny,
		"all":             AclOperationAll,
		"read":            AclOperationRead,
		"write":           AclOperationWrite,
		"create":          AclOperationCreate,
		"delete":          AclOperationDelete,
		"alter":           AclOperationAlter,
		"describe":        AclOperationDescribe,
		"clusteraction":   AclOperationClusterAction,
		"describeconfigs": AclOperationDescribeConfigs,
		"alterconfigs":    AclOperationAlterConfigs,
		"idempotentwrite": AclOperationIdempotentWrite,
	}
	ao, ok := mapping[normalized]
	if !ok {
		*a = AclOperationUnknown
		return fmt.Errorf("no acl operation with name %s", normalized)
	}
	*a = ao
	return nil
}

// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/acl/AclPermissionType.java
const (
	AclPermissionUnknown AclPermissionType = iota
	AclPermissionAny
	AclPermissionDeny
	AclPermissionAllow
)

func (a *AclPermissionType) String() string {
	mapping := map[AclPermissionType]string{
		AclPermissionUnknown: "Unknown",
		AclPermissionAny:     "Any",
		AclPermissionDeny:    "Deny",
		AclPermissionAllow:   "Allow",
	}
	s, ok := mapping[*a]
	if !ok {
		s = mapping[AclPermissionUnknown]
	}
	return s
}

// MarshalText returns the text form of the AclPermissionType (name without prefix)
func (a *AclPermissionType) MarshalText() ([]byte, error) {
	return []byte(a.String()), nil
}

// UnmarshalText takes a text representation of the permission type and converts it to an AclPermissionType
func (a *AclPermissionType) UnmarshalText(text []byte) error {
	normalized := strings.ToLower(string(text))
	mapping := map[string]AclPermissionType{
		"unknown": AclPermissionUnknown,
		"any":     AclPermissionAny,
		"deny":    AclPermissionDeny,
		"allow":   AclPermissionAllow,
	}

	apt, ok := mapping[normalized]
	if !ok {
		*a = AclPermissionUnknown
		return fmt.Errorf("no acl permission with name %s", normalized)
	}
	*a = apt
	return nil
}

// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/ResourceType.java
const (
	AclResourceUnknown AclResourceType = iota
	AclResourceAny
	AclResourceTopic
	AclResourceGroup
	AclResourceCluster
	AclResourceTransactionalID
	AclResourceDelegationToken
)

func (a *AclResourceType) String() string {
	mapping := map[AclResourceType]string{
		AclResourceUnknown:         "Unknown",
		AclResourceAny:             "Any",
		AclResourceTopic:           "Topic",
		AclResourceGroup:           "Group",
		AclResourceCluster:         "Cluster",
		AclResourceTransactionalID: "TransactionalID",
		AclResourceDelegationToken: "DelegationToken",
	}
	s, ok := mapping[*a]
	if !ok {
		s = mapping[AclResourceUnknown]
	}
	return s
}

// MarshalText returns the text form of the AclResourceType (name without prefix)
func (a *AclResourceType) MarshalText() ([]byte, error) {
	return []byte(a.String()), nil
}

// UnmarshalText takes a text representation of the resource type and converts it to an AclResourceType
func (a *AclResourceType) UnmarshalText(text []byte) error {
	normalized := strings.ToLower(string(text))
	mapping := map[string]AclResourceType{
		"unknown":         AclResourceUnknown,
		"any":             AclResourceAny,
		"topic":           AclResourceTopic,
		"group":           AclResourceGroup,
		"cluster":         AclResourceCluster,
		"transactionalid": AclResourceTransactionalID,
		"delegationtoken": AclResourceDelegationToken,
	}

	art, ok := mapping[normalized]
	if !ok {
		*a = AclResourceUnknown
		return fmt.Errorf("no acl resource with name %s", normalized)
	}
	*a = art
	return nil
}

// ref: https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/common/resource/PatternType.java
const (
	AclPatternUnknown AclResourcePatternType = iota
	AclPatternAny
	AclPatternMatch
	AclPatternLiteral
	AclPatternPrefixed
)

func (a *AclResourcePatternType) String() string {
	mapping := map[AclResourcePatternType]string{
		AclPatternUnknown:  "Unknown",
		AclPatternAny:      "Any",
		AclPatternMatch:    "Match",
		AclPatternLiteral:  "Literal",
		AclPatternPrefixed: "Prefixed",
	}
	s, ok := mapping[*a]
	if !ok {
		s = mapping[AclPatternUnknown]
	}
	return s
}

// MarshalText returns the text form of the AclResourcePatternType (name without prefix)
func (a *AclResourcePatternType) MarshalText() ([]byte, error) {
	return []byte(a.String()), nil
}

// UnmarshalText takes a text representation of the resource pattern type and converts it to an AclResourcePatternType
func (a *AclResourcePatternType) UnmarshalText(text []byte) error {
	normalized := strings.ToLower(string(text))
	mapping := map[string]AclResourcePatternType{
		"unknown":  AclPatternUnknown,
		"any":      AclPatternAny,
		"match":    AclPatternMatch,
		"literal":  AclPatternLiteral,
		"prefixed": AclPatternPrefixed,
	}

	arpt, ok := mapping[normalized]
	if !ok {
		*a = AclPatternUnknown
		return fmt.Errorf("no acl resource pattern with name %s", normalized)
	}
	*a = arpt
	return nil
}


================================================
FILE: acl_types_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
)

func TestAclOperationTextMarshal(t *testing.T) {
	for i := AclOperationUnknown; i <= AclOperationIdempotentWrite; i++ {
		text, err := i.MarshalText()
		if err != nil {
			t.Errorf("couldn't marshal %d to text: %s", i, err)
		}
		var got AclOperation
		err = got.UnmarshalText(text)
		if err != nil {
			t.Errorf("couldn't unmarshal %s to acl operation: %s", text, err)
		}
		if got != i {
			t.Errorf("got %d, want %d", got, i)
		}
	}
}

func TestAclPermissionTypeTextMarshal(t *testing.T) {
	for i := AclPermissionUnknown; i <= AclPermissionAllow; i++ {
		text, err := i.MarshalText()
		if err != nil {
			t.Errorf("couldn't marshal %d to text: %s", i, err)
		}
		var got AclPermissionType
		err = got.UnmarshalText(text)
		if err != nil {
			t.Errorf("couldn't unmarshal %s to acl permission: %s", text, err)
		}
		if got != i {
			t.Errorf("got %d, want %d", got, i)
		}
	}
}

func TestAclResourceTypeTextMarshal(t *testing.T) {
	for i := AclResourceUnknown; i <= AclResourceTransactionalID; i++ {
		text, err := i.MarshalText()
		if err != nil {
			t.Errorf("couldn't marshal %d to text: %s", i, err)
		}
		var got AclResourceType
		err = got.UnmarshalText(text)
		if err != nil {
			t.Errorf("couldn't unmarshal %s to acl resource: %s", text, err)
		}
		if got != i {
			t.Errorf("got %d, want %d", got, i)
		}
	}
}

func TestAclResourcePatternTypeTextMarshal(t *testing.T) {
	for i := AclPatternUnknown; i <= AclPatternPrefixed; i++ {
		text, err := i.MarshalText()
		if err != nil {
			t.Errorf("couldn't marshal %d to text: %s", i, err)
		}
		var got AclResourcePatternType
		err = got.UnmarshalText(text)
		if err != nil {
			t.Errorf("couldn't unmarshal %s to acl resource pattern: %s", text, err)
		}
		if got != i {
			t.Errorf("got %d, want %d", got, i)
		}
	}
}


================================================
FILE: add_offsets_to_txn_request.go
================================================
package sarama

// AddOffsetsToTxnRequest adds offsets to a transaction request
type AddOffsetsToTxnRequest struct {
	Version         int16
	TransactionalID string
	ProducerID      int64
	ProducerEpoch   int16
	GroupID         string
}

func (a *AddOffsetsToTxnRequest) setVersion(v int16) {
	a.Version = v
}

func (a *AddOffsetsToTxnRequest) encode(pe packetEncoder) error {
	if err := pe.putString(a.TransactionalID); err != nil {
		return err
	}

	pe.putInt64(a.ProducerID)

	pe.putInt16(a.ProducerEpoch)

	if err := pe.putString(a.GroupID); err != nil {
		return err
	}

	return nil
}

func (a *AddOffsetsToTxnRequest) decode(pd packetDecoder, version int16) (err error) {
	if a.TransactionalID, err = pd.getString(); err != nil {
		return err
	}
	if a.ProducerID, err = pd.getInt64(); err != nil {
		return err
	}
	if a.ProducerEpoch, err = pd.getInt16(); err != nil {
		return err
	}
	if a.GroupID, err = pd.getString(); err != nil {
		return err
	}
	return nil
}

func (a *AddOffsetsToTxnRequest) key() int16 {
	return apiKeyAddOffsetsToTxn
}

func (a *AddOffsetsToTxnRequest) version() int16 {
	return a.Version
}

func (a *AddOffsetsToTxnRequest) headerVersion() int16 {
	return 1
}

func (a *AddOffsetsToTxnRequest) isValidVersion() bool {
	return a.Version >= 0 && a.Version <= 2
}

func (a *AddOffsetsToTxnRequest) requiredVersion() KafkaVersion {
	switch a.Version {
	case 2:
		return V2_7_0_0
	case 1:
		return V2_0_0_0
	case 0:
		return V0_11_0_0
	default:
		return V2_7_0_0
	}
}


================================================
FILE: add_offsets_to_txn_request_test.go
================================================
//go:build !functional

package sarama

import "testing"

var addOffsetsToTxnRequest = []byte{
	0, 3, 't', 'x', 'n',
	0, 0, 0, 0, 0, 0, 31, 64,
	0, 0,
	0, 7, 'g', 'r', 'o', 'u', 'p', 'i', 'd',
}

func TestAddOffsetsToTxnRequest(t *testing.T) {
	req := &AddOffsetsToTxnRequest{
		TransactionalID: "txn",
		ProducerID:      8000,
		ProducerEpoch:   0,
		GroupID:         "groupid",
	}

	testRequest(t, "", req, addOffsetsToTxnRequest)
}


================================================
FILE: add_offsets_to_txn_response.go
================================================
package sarama

import (
	"time"
)

// AddOffsetsToTxnResponse is a response type for adding offsets to txns
type AddOffsetsToTxnResponse struct {
	Version      int16
	ThrottleTime time.Duration
	Err          KError
}

func (a *AddOffsetsToTxnResponse) setVersion(v int16) {
	a.Version = v
}

func (a *AddOffsetsToTxnResponse) encode(pe packetEncoder) error {
	pe.putDurationMs(a.ThrottleTime)
	pe.putKError(a.Err)
	return nil
}

func (a *AddOffsetsToTxnResponse) decode(pd packetDecoder, version int16) (err error) {
	if a.ThrottleTime, err = pd.getDurationMs(); err != nil {
		return err
	}

	a.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	return nil
}

func (a *AddOffsetsToTxnResponse) key() int16 {
	return apiKeyAddOffsetsToTxn
}

func (a *AddOffsetsToTxnResponse) version() int16 {
	return a.Version
}

func (a *AddOffsetsToTxnResponse) headerVersion() int16 {
	return 0
}

func (a *AddOffsetsToTxnResponse) isValidVersion() bool {
	return a.Version >= 0 && a.Version <= 2
}

func (a *AddOffsetsToTxnResponse) requiredVersion() KafkaVersion {
	switch a.Version {
	case 2:
		return V2_7_0_0
	case 1:
		return V2_0_0_0
	case 0:
		return V0_11_0_0
	default:
		return V2_7_0_0
	}
}

func (r *AddOffsetsToTxnResponse) throttleTime() time.Duration {
	return r.ThrottleTime
}


================================================
FILE: add_offsets_to_txn_response_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
	"time"
)

var addOffsetsToTxnResponse = []byte{
	0, 0, 0, 100,
	0, 47,
}

func TestAddOffsetsToTxnResponse(t *testing.T) {
	resp := &AddOffsetsToTxnResponse{
		ThrottleTime: 100 * time.Millisecond,
		Err:          ErrInvalidProducerEpoch,
	}

	testResponse(t, "", resp, addOffsetsToTxnResponse)
}


================================================
FILE: add_partitions_to_txn_request.go
================================================
package sarama

// AddPartitionsToTxnRequest is a add partition request
type AddPartitionsToTxnRequest struct {
	Version         int16
	TransactionalID string
	ProducerID      int64
	ProducerEpoch   int16
	TopicPartitions map[string][]int32
}

func (a *AddPartitionsToTxnRequest) setVersion(v int16) {
	a.Version = v
}

func (a *AddPartitionsToTxnRequest) encode(pe packetEncoder) error {
	if err := pe.putString(a.TransactionalID); err != nil {
		return err
	}
	pe.putInt64(a.ProducerID)
	pe.putInt16(a.ProducerEpoch)

	if err := pe.putArrayLength(len(a.TopicPartitions)); err != nil {
		return err
	}
	for topic, partitions := range a.TopicPartitions {
		if err := pe.putString(topic); err != nil {
			return err
		}
		if err := pe.putInt32Array(partitions); err != nil {
			return err
		}
	}

	return nil
}

func (a *AddPartitionsToTxnRequest) decode(pd packetDecoder, version int16) (err error) {
	if a.TransactionalID, err = pd.getString(); err != nil {
		return err
	}
	if a.ProducerID, err = pd.getInt64(); err != nil {
		return err
	}
	if a.ProducerEpoch, err = pd.getInt16(); err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	a.TopicPartitions = make(map[string][]int32)
	for i := 0; i < n; i++ {
		topic, err := pd.getString()
		if err != nil {
			return err
		}

		partitions, err := pd.getInt32Array()
		if err != nil {
			return err
		}

		a.TopicPartitions[topic] = partitions
	}

	return nil
}

func (a *AddPartitionsToTxnRequest) key() int16 {
	return apiKeyAddPartitionsToTxn
}

func (a *AddPartitionsToTxnRequest) version() int16 {
	return a.Version
}

func (a *AddPartitionsToTxnRequest) headerVersion() int16 {
	return 1
}

func (a *AddPartitionsToTxnRequest) isValidVersion() bool {
	return a.Version >= 0 && a.Version <= 2
}

func (a *AddPartitionsToTxnRequest) requiredVersion() KafkaVersion {
	switch a.Version {
	case 2:
		return V2_7_0_0
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}


================================================
FILE: add_partitions_to_txn_request_test.go
================================================
//go:build !functional

package sarama

import "testing"

var addPartitionsToTxnRequest = []byte{
	0, 3, 't', 'x', 'n',
	0, 0, 0, 0, 0, 0, 31, 64, // ProducerID
	0, 0, 0, 0, // ProducerEpoch
	0, 1, // 1 topic
	0, 5, 't', 'o', 'p', 'i', 'c',
	0, 0, 0, 1, 0, 0, 0, 1,
}

func TestAddPartitionsToTxnRequest(t *testing.T) {
	req := &AddPartitionsToTxnRequest{
		TransactionalID: "txn",
		ProducerID:      8000,
		ProducerEpoch:   0,
		TopicPartitions: map[string][]int32{
			"topic": {1},
		},
	}

	testRequest(t, "", req, addPartitionsToTxnRequest)
}


================================================
FILE: add_partitions_to_txn_response.go
================================================
package sarama

import (
	"time"
)

// AddPartitionsToTxnResponse is a partition errors to transaction type
type AddPartitionsToTxnResponse struct {
	Version      int16
	ThrottleTime time.Duration
	Errors       map[string][]*PartitionError
}

func (a *AddPartitionsToTxnResponse) setVersion(v int16) {
	a.Version = v
}

func (a *AddPartitionsToTxnResponse) encode(pe packetEncoder) error {
	pe.putDurationMs(a.ThrottleTime)
	if err := pe.putArrayLength(len(a.Errors)); err != nil {
		return err
	}

	for topic, e := range a.Errors {
		if err := pe.putString(topic); err != nil {
			return err
		}
		if err := pe.putArrayLength(len(e)); err != nil {
			return err
		}
		for _, partitionError := range e {
			if err := partitionError.encode(pe); err != nil {
				return err
			}
		}
	}

	return nil
}

func (a *AddPartitionsToTxnResponse) decode(pd packetDecoder, version int16) (err error) {
	a.Version = version
	if a.ThrottleTime, err = pd.getDurationMs(); err != nil {
		return err
	}

	n, err := pd.getArrayLength()
	if err != nil {
		return err
	}

	a.Errors = make(map[string][]*PartitionError)

	for i := 0; i < n; i++ {
		topic, err := pd.getString()
		if err != nil {
			return err
		}

		m, err := pd.getArrayLength()
		if err != nil {
			return err
		}

		a.Errors[topic] = make([]*PartitionError, m)

		for j := 0; j < m; j++ {
			a.Errors[topic][j] = new(PartitionError)
			if err := a.Errors[topic][j].decode(pd, version); err != nil {
				return err
			}
		}
	}

	return nil
}

func (a *AddPartitionsToTxnResponse) key() int16 {
	return apiKeyAddPartitionsToTxn
}

func (a *AddPartitionsToTxnResponse) version() int16 {
	return a.Version
}

func (a *AddPartitionsToTxnResponse) headerVersion() int16 {
	return 0
}

func (a *AddPartitionsToTxnResponse) isValidVersion() bool {
	return a.Version >= 0 && a.Version <= 2
}

func (a *AddPartitionsToTxnResponse) requiredVersion() KafkaVersion {
	switch a.Version {
	case 2:
		return V2_7_0_0
	case 1:
		return V2_0_0_0
	default:
		return V0_11_0_0
	}
}

func (r *AddPartitionsToTxnResponse) throttleTime() time.Duration {
	return r.ThrottleTime
}

// PartitionError is a partition error type
type PartitionError struct {
	Partition int32
	Err       KError
}

func (p *PartitionError) encode(pe packetEncoder) error {
	pe.putInt32(p.Partition)
	pe.putKError(p.Err)
	return nil
}

func (p *PartitionError) decode(pd packetDecoder, version int16) (err error) {
	if p.Partition, err = pd.getInt32(); err != nil {
		return err
	}

	p.Err, err = pd.getKError()
	if err != nil {
		return err
	}

	return nil
}


================================================
FILE: add_partitions_to_txn_response_test.go
================================================
//go:build !functional

package sarama

import (
	"testing"
	"time"
)

var addPartitionsToTxnResponse = []byte{
	0, 0, 0, 100,
	0, 0, 0, 1,
	0, 5, 't', 'o', 'p', 'i', 'c',
	0, 0, 0, 1, // 1 partition error
	0, 0, 0, 2, // partition 2
	0, 48, // error
}

func TestAddPartitionsToTxnResponse(t *testing.T) {
	resp := &AddPartitionsToTxnResponse{
		ThrottleTime: 100 * time.Millisecond,
		Errors: map[string][]*PartitionError{
			"topic": {{
				Err:       ErrInvalidTxnState,
				Partition: 2,
			}},
		},
	}

	testResponse(t, "", resp, addPartitionsToTxnResponse)
}


================================================
FILE: admin.go
================================================
package sarama

import (
	"errors"
	"fmt"
	"io"
	"maps"
	"math/rand"
	"net"
	"strconv"
	"sync"
	"time"
)

// ClusterAdmin is the administrative client for Kafka, which supports managing and inspecting topics,
// brokers, configurations and ACLs. The minimum broker version required is 0.10.0.0.
// Methods with stricter requirements will specify the minimum broker version required.
// You MUST call Close() on a client to avoid leaks
type ClusterAdmin interface {
	// Creates a new topic. This operation is supported by brokers with version 0.10.1.0 or higher.
	// It may take several seconds after CreateTopic returns success for all the brokers
	// to become aware that the topic has been created. During this time, listTopics
	// may not return information about the new topic.The validateOnly option is supported from version 0.10.2.0.
	CreateTopic(topic string, detail *TopicDetail, validateOnly bool) error

	// List the topics available in the cluster with the default options.
	ListTopics() (map[string]TopicDetail, error)

	// Describe some topics in the cluster.
	DescribeTopics(topics []string) (metadata []*TopicMetadata, err error)

	// Delete a topic. It may take several seconds after the DeleteTopic to returns success
	// and for all the brokers to become aware that the topics are gone.
	// During this time, listTopics  may continue to return information about the deleted topic.
	// If delete.topic.enable is false on the brokers, deleteTopic will mark
	// the topic for deletion, but not actually delete them.
	// This operation is supported by brokers with version 0.10.1.0 or higher.
	DeleteTopic(topic string) error

	// Increase the number of partitions of the topics  according to the corresponding values.
	// If partitions are increased for a topic that has a key, the partition logic or ordering of
	// the messages will be affected. It may take several seconds after this method returns
	// success for all the brokers to become aware that the partitions have been created.
	// During this time, ClusterAdmin#describeTopics may not return information about the
	// new partitions. This operation is supported by brokers with version 1.0.0 or higher.
	CreatePartitions(topic string, count int32, assignment [][]int32, validateOnly bool) error

	// Alter the replica assignment for partitions.
	// This operation is supported by brokers with version 2.4.0.0 or higher.
	AlterPartitionReassignments(topic string, assignment [][]int32) error

	// Provides info on ongoing partitions replica reassignments.
	// This operation is supported by brokers with version 2.4.0.0 or higher.
	ListPartitionReassignments(topics string, partitions []int32) (topicStatus map[string]map[int32]*PartitionReplicaReassignmentsStatus, err error)

	// Delete records whose offset is smaller than the given offset of the corresponding partition.
	// This operation is supported by brokers with version 0.11.0.0 or higher.
	DeleteRecords(topic string, partitionOffsets map[int32]int64) error

	// Get the configuration for the specified resources.
	// The returned configuration includes default values and the Default is true
	// can be used to distinguish them from user supplied values.
	// Config entries where ReadOnly is true cannot be updated.
	// The value of config entries where Sensitive is true is always nil so
	// sensitive information is not disclosed.
	// This operation is supported by brokers with version 0.11.0.0 or higher.
	DescribeConfig(resource ConfigResource) ([]ConfigEntry, error)

	// Update the configuration for the specified resources with the default options.
	// This operation is supported by brokers with version 0.11.0.0 or higher.
	// The resources with their configs (topic is the only resource type with configs
	// that can be updated currently Updates are not transactional so they may succeed
	// for some resources while fail for others. The configs for a particular resource are updated automatically.
	AlterConfig(resourceType ConfigResourceType, name string, entries map[string]*string, validateOnly bool) error

	// IncrementalAlterConfig Incrementally Update the configuration for the specified resources with the default options.
	// This operation is supported by brokers with version 2.3.0.0 or higher.
	// Updates are not transactional so they may succeed for some resources while fail for others.
	// The configs for a particular resource are updated automatically.
	IncrementalAlterConfig(resourceType ConfigResourceType, name string, entries map[string]IncrementalAlterConfigsEntry, validateOnly bool) error

	// Creates an access control list (ACL) which is bound to a specific resource.
	// This operation is not transactional so it may succeed or fail.
	// If you attempt to add an ACL that duplicates an existing ACL, no error will be raised, but
	// no changes will be made. This operation is supported by brokers with version 0.11.0.0 or higher.
	//
	// Deprecated: Use CreateACLs instead.
	CreateACL(resource Resource, acl Acl) error

	// Creates access control lists (ACLs) which are bound to specific resources.
	// This operation is not transactional so it may succeed for some ACLs while fail for others.
	// If you attempt to add an ACL that duplicates an existing ACL, no error will be raised, but
	// no changes will be made. This operation is supported by brokers with version 0.11.0.0 or higher.
	CreateACLs([]*ResourceAcls) error

	// Lists access control lists (ACLs) according to the supplied filter.
	// it may take some time for changes made by createAcls or deleteAcls to be reflected in the output of ListAcls
	// This operation is supported by brokers with version 0.11.0.0 or higher.
	ListAcls(filter AclFilter) ([]ResourceAcls, error)

	// Deletes access control lists (ACLs) according to the supplied filters.
	// This operation is not transactional so it may succeed for some ACLs while fail for others.
	// This operation is supported by brokers with version 0.11.0.0 or higher.
	DeleteACL(filter AclFilter, validateOnly bool) ([]MatchingAcl, error)

	// ElectLeaders allows to trigger the election of preferred leaders for a set of partitions.
	
Download .txt
gitextract_pmrrr8_5/

├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   └── feature_request.md
│   ├── actions/
│   │   └── staticcheck-matchers.json
│   ├── dependabot.yml
│   ├── release.yaml
│   ├── renovate.json5
│   └── workflows/
│       ├── apidiff.yml
│       ├── cache-cleanup.yml
│       ├── ci.yml
│       ├── codeql-analysis.yml
│       ├── dependency-review.yml
│       ├── fuzz.yml
│       ├── fvt-main.yml
│       ├── fvt-pr.yml
│       ├── fvt.yml
│       ├── i386.yml
│       ├── renovate-config.yml
│       ├── scorecard.yml
│       └── stale.yml
├── .gitignore
├── .golangci.yml
├── .pre-commit-config.yaml
├── .whitesource
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile.kafka
├── LICENSE.md
├── Makefile
├── README.md
├── SECURITY.md
├── Vagrantfile
├── acl_bindings.go
├── acl_create_request.go
├── acl_create_request_test.go
├── acl_create_response.go
├── acl_create_response_test.go
├── acl_delete_request.go
├── acl_delete_request_test.go
├── acl_delete_response.go
├── acl_delete_response_test.go
├── acl_describe_request.go
├── acl_describe_request_test.go
├── acl_describe_response.go
├── acl_describe_response_test.go
├── acl_filter.go
├── acl_types.go
├── acl_types_test.go
├── add_offsets_to_txn_request.go
├── add_offsets_to_txn_request_test.go
├── add_offsets_to_txn_response.go
├── add_offsets_to_txn_response_test.go
├── add_partitions_to_txn_request.go
├── add_partitions_to_txn_request_test.go
├── add_partitions_to_txn_response.go
├── add_partitions_to_txn_response_test.go
├── admin.go
├── admin_test.go
├── alter_client_quotas_request.go
├── alter_client_quotas_request_test.go
├── alter_client_quotas_response.go
├── alter_client_quotas_response_test.go
├── alter_configs_request.go
├── alter_configs_request_test.go
├── alter_configs_response.go
├── alter_configs_response_test.go
├── alter_partition_reassignments_request.go
├── alter_partition_reassignments_request_test.go
├── alter_partition_reassignments_response.go
├── alter_partition_reassignments_response_test.go
├── alter_user_scram_credentials_request.go
├── alter_user_scram_credentials_request_test.go
├── alter_user_scram_credentials_response.go
├── alter_user_scram_credentials_response_test.go
├── api_versions.go
├── api_versions_request.go
├── api_versions_request_test.go
├── api_versions_response.go
├── api_versions_response_test.go
├── api_versions_test.go
├── async_producer.go
├── async_producer_test.go
├── balance_strategy.go
├── balance_strategy_test.go
├── broker.go
├── broker_test.go
├── client.go
├── client_test.go
├── client_tls_test.go
├── compress.go
├── config.go
├── config_resource_type.go
├── config_test.go
├── consumer.go
├── consumer_group.go
├── consumer_group_example_test.go
├── consumer_group_members.go
├── consumer_group_members_test.go
├── consumer_group_test.go
├── consumer_metadata_request.go
├── consumer_metadata_request_test.go
├── consumer_metadata_response.go
├── consumer_metadata_response_test.go
├── consumer_test.go
├── control_record.go
├── control_record_test.go
├── crc32_field.go
├── create_partitions_request.go
├── create_partitions_request_test.go
├── create_partitions_response.go
├── create_partitions_response_test.go
├── create_topics_request.go
├── create_topics_request_test.go
├── create_topics_response.go
├── create_topics_response_test.go
├── decompress.go
├── delete_groups_request.go
├── delete_groups_request_test.go
├── delete_groups_response.go
├── delete_groups_response_test.go
├── delete_offsets_request.go
├── delete_offsets_request_test.go
├── delete_offsets_response.go
├── delete_offsets_response_test.go
├── delete_records_request.go
├── delete_records_request_test.go
├── delete_records_response.go
├── delete_records_response_test.go
├── delete_topics_request.go
├── delete_topics_request_test.go
├── delete_topics_response.go
├── delete_topics_response_test.go
├── describe_client_quotas_request.go
├── describe_client_quotas_request_test.go
├── describe_client_quotas_response.go
├── describe_client_quotas_response_test.go
├── describe_cluster_request.go
├── describe_cluster_request_test.go
├── describe_cluster_response.go
├── describe_cluster_response_test.go
├── describe_configs_request.go
├── describe_configs_request_test.go
├── describe_configs_response.go
├── describe_configs_response_test.go
├── describe_groups_request.go
├── describe_groups_request_test.go
├── describe_groups_response.go
├── describe_groups_response_test.go
├── describe_log_dirs_request.go
├── describe_log_dirs_request_test.go
├── describe_log_dirs_response.go
├── describe_log_dirs_response_test.go
├── describe_user_scram_credentials_request.go
├── describe_user_scram_credentials_request_test.go
├── describe_user_scram_credentials_response.go
├── describe_user_scram_credentials_response_test.go
├── dev.yml
├── docker-compose.yml
├── elect_leaders_request.go
├── elect_leaders_request_test.go
├── elect_leaders_response.go
├── elect_leaders_response_test.go
├── election_type.go
├── encoder_decoder.go
├── encoder_decoder_fuzz_test.go
├── end_txn_request.go
├── end_txn_request_test.go
├── end_txn_response.go
├── end_txn_response_test.go
├── entrypoint.sh
├── errors.go
├── errors_test.go
├── examples/
│   ├── README.md
│   ├── consumergroup/
│   │   ├── README.md
│   │   ├── go.mod
│   │   ├── go.sum
│   │   └── main.go
│   └── interceptors/
│       ├── README.md
│       ├── go.mod
│       ├── go.sum
│       ├── main.go
│       └── trace_interceptor.go
├── fetch_request.go
├── fetch_request_test.go
├── fetch_response.go
├── fetch_response_test.go
├── find_coordinator_request.go
├── find_coordinator_request_test.go
├── find_coordinator_response.go
├── find_coordinator_response_test.go
├── functional_admin_test.go
├── functional_client_test.go
├── functional_consumer_follower_fetch_test.go
├── functional_consumer_group_test.go
├── functional_consumer_staticmembership_test.go
├── functional_consumer_test.go
├── functional_java_interop_test.go
├── functional_offset_manager_test.go
├── functional_producer_test.go
├── functional_test.go
├── go.mod
├── go.sum
├── gssapi_kerberos.go
├── heartbeat_request.go
├── heartbeat_request_test.go
├── heartbeat_response.go
├── heartbeat_response_test.go
├── helpers_test.go
├── incremental_alter_configs_request.go
├── incremental_alter_configs_request_test.go
├── incremental_alter_configs_response.go
├── incremental_alter_configs_response_test.go
├── init_producer_id_request.go
├── init_producer_id_request_test.go
├── init_producer_id_response.go
├── init_producer_id_response_test.go
├── interceptors.go
├── internal/
│   └── toxiproxy/
│       ├── README.md
│       ├── client.go
│       ├── proxy.go
│       └── toxic.go
├── join_group_request.go
├── join_group_request_test.go
├── join_group_response.go
├── join_group_response_test.go
├── kerberos_client.go
├── kerberos_client_test.go
├── leave_group_request.go
├── leave_group_request_test.go
├── leave_group_response.go
├── leave_group_response_test.go
├── length_field.go
├── list_groups_request.go
├── list_groups_request_test.go
├── list_groups_response.go
├── list_groups_response_test.go
├── list_partition_reassignments_request.go
├── list_partition_reassignments_request_test.go
├── list_partition_reassignments_response.go
├── list_partition_reassignments_response_test.go
├── logger_test.go
├── message.go
├── message_set.go
├── message_test.go
├── metadata.go
├── metadata_request.go
├── metadata_request_test.go
├── metadata_response.go
├── metadata_response_test.go
├── metadata_test.go
├── metrics.go
├── metrics_helpers_test.go
├── metrics_test.go
├── mockbroker.go
├── mockkerberos.go
├── mockresponses.go
├── mocks/
│   ├── README.md
│   ├── async_producer.go
│   ├── async_producer_test.go
│   ├── consumer.go
│   ├── consumer_test.go
│   ├── mocks.go
│   ├── sync_producer.go
│   └── sync_producer_test.go
├── offset_commit_request.go
├── offset_commit_request_test.go
├── offset_commit_response.go
├── offset_commit_response_test.go
├── offset_fetch_request.go
├── offset_fetch_request_test.go
├── offset_fetch_response.go
├── offset_fetch_response_test.go
├── offset_manager.go
├── offset_manager_test.go
├── offset_request.go
├── offset_request_test.go
├── offset_response.go
├── offset_response_test.go
├── packet_decoder.go
├── packet_encoder.go
├── partitioner.go
├── partitioner_test.go
├── prep_encoder.go
├── produce_request.go
├── produce_request_test.go
├── produce_response.go
├── produce_response_test.go
├── produce_set.go
├── produce_set_test.go
├── quota_types.go
├── real_decoder.go
├── real_decoder_test.go
├── real_encoder.go
├── record.go
├── record_batch.go
├── record_test.go
├── records.go
├── records_test.go
├── request.go
├── request_test.go
├── response_header.go
├── response_header_test.go
├── sarama.go
├── sarama_test.go
├── sasl_authenticate_request.go
├── sasl_authenticate_request_test.go
├── sasl_authenticate_response.go
├── sasl_authenticate_response_test.go
├── sasl_handshake_request.go
├── sasl_handshake_request_test.go
├── sasl_handshake_response.go
├── sasl_handshake_response_test.go
├── scram_formatter.go
├── scram_formatter_test.go
├── server.properties
├── sticky_assignor_user_data.go
├── sticky_assignor_user_data_test.go
├── sync_group_request.go
├── sync_group_request_test.go
├── sync_group_response.go
├── sync_group_response_test.go
├── sync_producer.go
├── sync_producer_test.go
├── timestamp.go
├── tools/
│   ├── README.md
│   ├── kafka-producer-performance/
│   │   ├── README.md
│   │   └── main.go
│   └── tls/
│       └── config.go
├── transaction_manager.go
├── transaction_manager_test.go
├── txn_offset_commit_request.go
├── txn_offset_commit_request_test.go
├── txn_offset_commit_response.go
├── txn_offset_commit_response_test.go
├── utils.go
├── utils_test.go
├── version.go
├── zstd.go
└── zstd_test.go
Download .txt
Showing preview only (351K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (3569 symbols across 290 files)

FILE: acl_bindings.go
  type Resource (line 4) | type Resource struct
    method encode (line 10) | func (r *Resource) encode(pe packetEncoder, version int16) error {
    method decode (line 28) | func (r *Resource) decode(pd packetDecoder, version int16) (err error) {
  type Acl (line 50) | type Acl struct
    method encode (line 57) | func (a *Acl) encode(pe packetEncoder) error {
    method decode (line 72) | func (a *Acl) decode(pd packetDecoder, version int16) (err error) {
  type ResourceAcls (line 97) | type ResourceAcls struct
    method encode (line 102) | func (r *ResourceAcls) encode(pe packetEncoder, version int16) error {
    method decode (line 119) | func (r *ResourceAcls) decode(pd packetDecoder, version int16) error {

FILE: acl_create_request.go
  type CreateAclsRequest (line 4) | type CreateAclsRequest struct
    method setVersion (line 9) | func (c *CreateAclsRequest) setVersion(v int16) {
    method encode (line 13) | func (c *CreateAclsRequest) encode(pe packetEncoder) error {
    method decode (line 27) | func (c *CreateAclsRequest) decode(pd packetDecoder, version int16) (e...
    method key (line 46) | func (c *CreateAclsRequest) key() int16 {
    method version (line 50) | func (c *CreateAclsRequest) version() int16 {
    method headerVersion (line 54) | func (c *CreateAclsRequest) headerVersion() int16 {
    method isValidVersion (line 58) | func (c *CreateAclsRequest) isValidVersion() bool {
    method requiredVersion (line 62) | func (c *CreateAclsRequest) requiredVersion() KafkaVersion {
  type AclCreation (line 72) | type AclCreation struct
    method encode (line 77) | func (a *AclCreation) encode(pe packetEncoder, version int16) error {
    method decode (line 88) | func (a *AclCreation) decode(pd packetDecoder, version int16) (err err...

FILE: acl_create_request_test.go
  function TestCreateAclsRequestv0 (line 29) | func TestCreateAclsRequestv0(t *testing.T) {
  function TestCreateAclsRequestv1 (line 51) | func TestCreateAclsRequestv1(t *testing.T) {

FILE: acl_create_response.go
  type CreateAclsResponse (line 6) | type CreateAclsResponse struct
    method setVersion (line 12) | func (c *CreateAclsResponse) setVersion(v int16) {
    method encode (line 16) | func (c *CreateAclsResponse) encode(pe packetEncoder) error {
    method decode (line 32) | func (c *CreateAclsResponse) decode(pd packetDecoder, version int16) (...
    method key (line 54) | func (c *CreateAclsResponse) key() int16 {
    method version (line 58) | func (c *CreateAclsResponse) version() int16 {
    method headerVersion (line 62) | func (c *CreateAclsResponse) headerVersion() int16 {
    method isValidVersion (line 66) | func (c *CreateAclsResponse) isValidVersion() bool {
    method requiredVersion (line 70) | func (c *CreateAclsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 79) | func (r *CreateAclsResponse) throttleTime() time.Duration {
  type AclCreationResponse (line 84) | type AclCreationResponse struct
    method encode (line 89) | func (a *AclCreationResponse) encode(pe packetEncoder) error {
    method decode (line 99) | func (a *AclCreationResponse) decode(pd packetDecoder, version int16) ...

FILE: acl_create_response_test.go
  function TestCreateAclsResponse (line 28) | func TestCreateAclsResponse(t *testing.T) {

FILE: acl_delete_request.go
  type DeleteAclsRequest (line 4) | type DeleteAclsRequest struct
    method setVersion (line 9) | func (d *DeleteAclsRequest) setVersion(v int16) {
    method encode (line 13) | func (d *DeleteAclsRequest) encode(pe packetEncoder) error {
    method decode (line 28) | func (d *DeleteAclsRequest) decode(pd packetDecoder, version int16) (e...
    method key (line 47) | func (d *DeleteAclsRequest) key() int16 {
    method version (line 51) | func (d *DeleteAclsRequest) version() int16 {
    method headerVersion (line 55) | func (d *DeleteAclsRequest) headerVersion() int16 {
    method isValidVersion (line 59) | func (d *DeleteAclsRequest) isValidVersion() bool {
    method requiredVersion (line 63) | func (d *DeleteAclsRequest) requiredVersion() KafkaVersion {

FILE: acl_delete_request_test.go
  function TestDeleteAclsRequest (line 67) | func TestDeleteAclsRequest(t *testing.T) {
  function TestDeleteAclsRequestV1 (line 95) | func TestDeleteAclsRequestV1(t *testing.T) {

FILE: acl_delete_response.go
  type DeleteAclsResponse (line 6) | type DeleteAclsResponse struct
    method setVersion (line 12) | func (d *DeleteAclsResponse) setVersion(v int16) {
    method encode (line 16) | func (d *DeleteAclsResponse) encode(pe packetEncoder) error {
    method decode (line 32) | func (d *DeleteAclsResponse) decode(pd packetDecoder, version int16) (...
    method key (line 53) | func (d *DeleteAclsResponse) key() int16 {
    method version (line 57) | func (d *DeleteAclsResponse) version() int16 {
    method headerVersion (line 61) | func (d *DeleteAclsResponse) headerVersion() int16 {
    method isValidVersion (line 65) | func (d *DeleteAclsResponse) isValidVersion() bool {
    method requiredVersion (line 69) | func (d *DeleteAclsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 78) | func (r *DeleteAclsResponse) throttleTime() time.Duration {
  type FilterResponse (line 83) | type FilterResponse struct
    method encode (line 89) | func (f *FilterResponse) encode(pe packetEncoder, version int16) error {
    method decode (line 107) | func (f *FilterResponse) decode(pd packetDecoder, version int16) (err ...
  type MatchingAcl (line 133) | type MatchingAcl struct
    method encode (line 140) | func (m *MatchingAcl) encode(pe packetEncoder, version int16) error {
    method decode (line 157) | func (m *MatchingAcl) decode(pd packetDecoder, version int16) (err err...

FILE: acl_delete_response_test.go
  function TestDeleteAclsResponse (line 26) | func TestDeleteAclsResponse(t *testing.T) {

FILE: acl_describe_request.go
  type DescribeAclsRequest (line 4) | type DescribeAclsRequest struct
    method setVersion (line 9) | func (d *DescribeAclsRequest) setVersion(v int16) {
    method encode (line 13) | func (d *DescribeAclsRequest) encode(pe packetEncoder) error {
    method decode (line 18) | func (d *DescribeAclsRequest) decode(pd packetDecoder, version int16) ...
    method key (line 24) | func (d *DescribeAclsRequest) key() int16 {
    method version (line 28) | func (d *DescribeAclsRequest) version() int16 {
    method headerVersion (line 32) | func (d *DescribeAclsRequest) headerVersion() int16 {
    method isValidVersion (line 36) | func (d *DescribeAclsRequest) isValidVersion() bool {
    method requiredVersion (line 40) | func (d *DescribeAclsRequest) requiredVersion() KafkaVersion {

FILE: acl_describe_request_test.go
  function TestAclDescribeRequestV0 (line 29) | func TestAclDescribeRequestV0(t *testing.T) {
  function TestAclDescribeRequestV1 (line 48) | func TestAclDescribeRequestV1(t *testing.T) {

FILE: acl_describe_response.go
  type DescribeAclsResponse (line 6) | type DescribeAclsResponse struct
    method setVersion (line 14) | func (d *DescribeAclsResponse) setVersion(v int16) {
    method encode (line 18) | func (d *DescribeAclsResponse) encode(pe packetEncoder) error {
    method decode (line 39) | func (d *DescribeAclsResponse) decode(pd packetDecoder, version int16)...
    method key (line 73) | func (d *DescribeAclsResponse) key() int16 {
    method version (line 77) | func (d *DescribeAclsResponse) version() int16 {
    method headerVersion (line 81) | func (d *DescribeAclsResponse) headerVersion() int16 {
    method isValidVersion (line 85) | func (d *DescribeAclsResponse) isValidVersion() bool {
    method requiredVersion (line 89) | func (d *DescribeAclsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 98) | func (r *DescribeAclsResponse) throttleTime() time.Duration {

FILE: acl_describe_response_test.go
  function TestAclDescribeResponse (line 24) | func TestAclDescribeResponse(t *testing.T) {

FILE: acl_filter.go
  type AclFilter (line 3) | type AclFilter struct
    method encode (line 14) | func (a *AclFilter) encode(pe packetEncoder) error {
    method decode (line 36) | func (a *AclFilter) decode(pd packetDecoder, version int16) (err error) {

FILE: acl_types.go
  type AclOperation (line 9) | type AclOperation
    method String (line 35) | func (a *AclOperation) String() string {
    method MarshalText (line 59) | func (a *AclOperation) MarshalText() ([]byte, error) {
    method UnmarshalText (line 64) | func (a *AclOperation) UnmarshalText(text []byte) error {
  type AclPermissionType (line 11) | type AclPermissionType
    method String (line 98) | func (a *AclPermissionType) String() string {
    method MarshalText (line 113) | func (a *AclPermissionType) MarshalText() ([]byte, error) {
    method UnmarshalText (line 118) | func (a *AclPermissionType) UnmarshalText(text []byte) error {
  type AclResourceType (line 13) | type AclResourceType
    method String (line 147) | func (a *AclResourceType) String() string {
    method MarshalText (line 165) | func (a *AclResourceType) MarshalText() ([]byte, error) {
    method UnmarshalText (line 170) | func (a *AclResourceType) UnmarshalText(text []byte) error {
  type AclResourcePatternType (line 15) | type AclResourcePatternType
    method String (line 200) | func (a *AclResourcePatternType) String() string {
    method MarshalText (line 216) | func (a *AclResourcePatternType) MarshalText() ([]byte, error) {
    method UnmarshalText (line 221) | func (a *AclResourcePatternType) UnmarshalText(text []byte) error {
  constant AclOperationUnknown (line 20) | AclOperationUnknown AclOperation = iota
  constant AclOperationAny (line 21) | AclOperationAny
  constant AclOperationAll (line 22) | AclOperationAll
  constant AclOperationRead (line 23) | AclOperationRead
  constant AclOperationWrite (line 24) | AclOperationWrite
  constant AclOperationCreate (line 25) | AclOperationCreate
  constant AclOperationDelete (line 26) | AclOperationDelete
  constant AclOperationAlter (line 27) | AclOperationAlter
  constant AclOperationDescribe (line 28) | AclOperationDescribe
  constant AclOperationClusterAction (line 29) | AclOperationClusterAction
  constant AclOperationDescribeConfigs (line 30) | AclOperationDescribeConfigs
  constant AclOperationAlterConfigs (line 31) | AclOperationAlterConfigs
  constant AclOperationIdempotentWrite (line 32) | AclOperationIdempotentWrite
  constant AclPermissionUnknown (line 92) | AclPermissionUnknown AclPermissionType = iota
  constant AclPermissionAny (line 93) | AclPermissionAny
  constant AclPermissionDeny (line 94) | AclPermissionDeny
  constant AclPermissionAllow (line 95) | AclPermissionAllow
  constant AclResourceUnknown (line 138) | AclResourceUnknown AclResourceType = iota
  constant AclResourceAny (line 139) | AclResourceAny
  constant AclResourceTopic (line 140) | AclResourceTopic
  constant AclResourceGroup (line 141) | AclResourceGroup
  constant AclResourceCluster (line 142) | AclResourceCluster
  constant AclResourceTransactionalID (line 143) | AclResourceTransactionalID
  constant AclResourceDelegationToken (line 144) | AclResourceDelegationToken
  constant AclPatternUnknown (line 193) | AclPatternUnknown AclResourcePatternType = iota
  constant AclPatternAny (line 194) | AclPatternAny
  constant AclPatternMatch (line 195) | AclPatternMatch
  constant AclPatternLiteral (line 196) | AclPatternLiteral
  constant AclPatternPrefixed (line 197) | AclPatternPrefixed

FILE: acl_types_test.go
  function TestAclOperationTextMarshal (line 9) | func TestAclOperationTextMarshal(t *testing.T) {
  function TestAclPermissionTypeTextMarshal (line 26) | func TestAclPermissionTypeTextMarshal(t *testing.T) {
  function TestAclResourceTypeTextMarshal (line 43) | func TestAclResourceTypeTextMarshal(t *testing.T) {
  function TestAclResourcePatternTypeTextMarshal (line 60) | func TestAclResourcePatternTypeTextMarshal(t *testing.T) {

FILE: add_offsets_to_txn_request.go
  type AddOffsetsToTxnRequest (line 4) | type AddOffsetsToTxnRequest struct
    method setVersion (line 12) | func (a *AddOffsetsToTxnRequest) setVersion(v int16) {
    method encode (line 16) | func (a *AddOffsetsToTxnRequest) encode(pe packetEncoder) error {
    method decode (line 32) | func (a *AddOffsetsToTxnRequest) decode(pd packetDecoder, version int1...
    method key (line 48) | func (a *AddOffsetsToTxnRequest) key() int16 {
    method version (line 52) | func (a *AddOffsetsToTxnRequest) version() int16 {
    method headerVersion (line 56) | func (a *AddOffsetsToTxnRequest) headerVersion() int16 {
    method isValidVersion (line 60) | func (a *AddOffsetsToTxnRequest) isValidVersion() bool {
    method requiredVersion (line 64) | func (a *AddOffsetsToTxnRequest) requiredVersion() KafkaVersion {

FILE: add_offsets_to_txn_request_test.go
  function TestAddOffsetsToTxnRequest (line 14) | func TestAddOffsetsToTxnRequest(t *testing.T) {

FILE: add_offsets_to_txn_response.go
  type AddOffsetsToTxnResponse (line 8) | type AddOffsetsToTxnResponse struct
    method setVersion (line 14) | func (a *AddOffsetsToTxnResponse) setVersion(v int16) {
    method encode (line 18) | func (a *AddOffsetsToTxnResponse) encode(pe packetEncoder) error {
    method decode (line 24) | func (a *AddOffsetsToTxnResponse) decode(pd packetDecoder, version int...
    method key (line 37) | func (a *AddOffsetsToTxnResponse) key() int16 {
    method version (line 41) | func (a *AddOffsetsToTxnResponse) version() int16 {
    method headerVersion (line 45) | func (a *AddOffsetsToTxnResponse) headerVersion() int16 {
    method isValidVersion (line 49) | func (a *AddOffsetsToTxnResponse) isValidVersion() bool {
    method requiredVersion (line 53) | func (a *AddOffsetsToTxnResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 66) | func (r *AddOffsetsToTxnResponse) throttleTime() time.Duration {

FILE: add_offsets_to_txn_response_test.go
  function TestAddOffsetsToTxnResponse (line 15) | func TestAddOffsetsToTxnResponse(t *testing.T) {

FILE: add_partitions_to_txn_request.go
  type AddPartitionsToTxnRequest (line 4) | type AddPartitionsToTxnRequest struct
    method setVersion (line 12) | func (a *AddPartitionsToTxnRequest) setVersion(v int16) {
    method encode (line 16) | func (a *AddPartitionsToTxnRequest) encode(pe packetEncoder) error {
    method decode (line 38) | func (a *AddPartitionsToTxnRequest) decode(pd packetDecoder, version i...
    method key (line 72) | func (a *AddPartitionsToTxnRequest) key() int16 {
    method version (line 76) | func (a *AddPartitionsToTxnRequest) version() int16 {
    method headerVersion (line 80) | func (a *AddPartitionsToTxnRequest) headerVersion() int16 {
    method isValidVersion (line 84) | func (a *AddPartitionsToTxnRequest) isValidVersion() bool {
    method requiredVersion (line 88) | func (a *AddPartitionsToTxnRequest) requiredVersion() KafkaVersion {

FILE: add_partitions_to_txn_request_test.go
  function TestAddPartitionsToTxnRequest (line 16) | func TestAddPartitionsToTxnRequest(t *testing.T) {

FILE: add_partitions_to_txn_response.go
  type AddPartitionsToTxnResponse (line 8) | type AddPartitionsToTxnResponse struct
    method setVersion (line 14) | func (a *AddPartitionsToTxnResponse) setVersion(v int16) {
    method encode (line 18) | func (a *AddPartitionsToTxnResponse) encode(pe packetEncoder) error {
    method decode (line 41) | func (a *AddPartitionsToTxnResponse) decode(pd packetDecoder, version ...
    method key (line 78) | func (a *AddPartitionsToTxnResponse) key() int16 {
    method version (line 82) | func (a *AddPartitionsToTxnResponse) version() int16 {
    method headerVersion (line 86) | func (a *AddPartitionsToTxnResponse) headerVersion() int16 {
    method isValidVersion (line 90) | func (a *AddPartitionsToTxnResponse) isValidVersion() bool {
    method requiredVersion (line 94) | func (a *AddPartitionsToTxnResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 105) | func (r *AddPartitionsToTxnResponse) throttleTime() time.Duration {
  type PartitionError (line 110) | type PartitionError struct
    method encode (line 115) | func (p *PartitionError) encode(pe packetEncoder) error {
    method decode (line 121) | func (p *PartitionError) decode(pd packetDecoder, version int16) (err ...

FILE: add_partitions_to_txn_response_test.go
  function TestAddPartitionsToTxnResponse (line 19) | func TestAddPartitionsToTxnResponse(t *testing.T) {

FILE: admin.go
  type ClusterAdmin (line 19) | type ClusterAdmin interface
  type clusterAdmin (line 164) | type clusterAdmin struct
    method Close (line 198) | func (ca *clusterAdmin) Close() error {
    method Controller (line 202) | func (ca *clusterAdmin) Controller() (*Broker, error) {
    method Coordinator (line 206) | func (ca *clusterAdmin) Coordinator(group string) (*Broker, error) {
    method refreshController (line 210) | func (ca *clusterAdmin) refreshController() (*Broker, error) {
    method retryOnError (line 231) | func (ca *clusterAdmin) retryOnError(retryable func(error) bool, fn fu...
    method CreateTopic (line 245) | func (ca *clusterAdmin) CreateTopic(topic string, detail *TopicDetail,...
    method DescribeTopics (line 292) | func (ca *clusterAdmin) DescribeTopics(topics []string) (metadata []*T...
    method DescribeCluster (line 312) | func (ca *clusterAdmin) DescribeCluster() (brokers []*Broker, controll...
    method describeClusterUsingAPI (line 325) | func (ca *clusterAdmin) describeClusterUsingAPI() (brokers []*Broker, ...
    method describeClusterUsingMetadata (line 357) | func (ca *clusterAdmin) describeClusterUsingMetadata() (brokers []*Bro...
    method findBroker (line 398) | func (ca *clusterAdmin) findBroker(id int32) (*Broker, error) {
    method findAnyBroker (line 408) | func (ca *clusterAdmin) findAnyBroker() (*Broker, error) {
    method ListTopics (line 417) | func (ca *clusterAdmin) ListTopics() (map[string]TopicDetail, error) {
    method DeleteTopic (line 498) | func (ca *clusterAdmin) DeleteTopic(topic string) error {
    method CreatePartitions (line 547) | func (ca *clusterAdmin) CreatePartitions(topic string, count int32, as...
    method AlterPartitionReassignments (line 595) | func (ca *clusterAdmin) AlterPartitionReassignments(topic string, assi...
    method ListPartitionReassignments (line 643) | func (ca *clusterAdmin) ListPartitionReassignments(topic string, parti...
    method DeleteRecords (line 677) | func (ca *clusterAdmin) DeleteRecords(topic string, partitionOffsets m...
    method DescribeConfig (line 742) | func (ca *clusterAdmin) DescribeConfig(resource ConfigResource) ([]Con...
    method AlterConfig (line 798) | func (ca *clusterAdmin) AlterConfig(resourceType ConfigResourceType, n...
    method IncrementalAlterConfig (line 850) | func (ca *clusterAdmin) IncrementalAlterConfig(resourceType ConfigReso...
    method CreateACL (line 907) | func (ca *clusterAdmin) CreateACL(resource Resource, acl Acl) error {
    method CreateACLs (line 925) | func (ca *clusterAdmin) CreateACLs(resourceACLs []*ResourceAcls) error {
    method ListAcls (line 947) | func (ca *clusterAdmin) ListAcls(filter AclFilter) ([]ResourceAcls, er...
    method DeleteACL (line 971) | func (ca *clusterAdmin) DeleteACL(filter AclFilter, validateOnly bool)...
    method ElectLeaders (line 999) | func (ca *clusterAdmin) ElectLeaders(electionType ElectionType, partit...
    method DescribeConsumerGroups (line 1037) | func (ca *clusterAdmin) DescribeConsumerGroups(groups []string) (resul...
    method ListConsumerGroups (line 1077) | func (ca *clusterAdmin) ListConsumerGroups() (allGroups map[string]str...
    method ListConsumerGroupOffsets (line 1133) | func (ca *clusterAdmin) ListConsumerGroupOffsets(group string, topicPa...
    method DeleteConsumerGroupOffset (line 1162) | func (ca *clusterAdmin) DeleteConsumerGroupOffset(group string, topic ...
    method DeleteConsumerGroup (line 1198) | func (ca *clusterAdmin) DeleteConsumerGroup(group string) error {
    method DescribeLogDirs (line 1240) | func (ca *clusterAdmin) DescribeLogDirs(brokerIds []int32) (allLogDirs...
    method DescribeUserScramCredentials (line 1298) | func (ca *clusterAdmin) DescribeUserScramCredentials(users []string) (...
    method UpsertUserScramCredentials (line 1319) | func (ca *clusterAdmin) UpsertUserScramCredentials(upsert []AlterUserS...
    method DeleteUserScramCredentials (line 1328) | func (ca *clusterAdmin) DeleteUserScramCredentials(delete []AlterUserS...
    method AlterUserScramCredentials (line 1337) | func (ca *clusterAdmin) AlterUserScramCredentials(u []AlterUserScramCr...
    method DescribeClientQuotas (line 1363) | func (ca *clusterAdmin) DescribeClientQuotas(components []QuotaFilterC...
    method AlterClientQuotas (line 1390) | func (ca *clusterAdmin) AlterClientQuotas(entity []QuotaEntityComponen...
    method RemoveMemberFromConsumerGroup (line 1423) | func (ca *clusterAdmin) RemoveMemberFromConsumerGroup(group string, gr...
  function NewClusterAdmin (line 170) | func NewClusterAdmin(addrs []string, conf *Config) (ClusterAdmin, error) {
  function NewClusterAdminFromClient (line 184) | func NewClusterAdminFromClient(client Client) (ClusterAdmin, error) {
  function isRetriableControllerError (line 216) | func isRetriableControllerError(err error) bool {
  function isRetriableGroupCoordinatorError (line 223) | func isRetriableGroupCoordinatorError(err error) bool {
  function convertDescribeClusterBrokers (line 379) | func convertDescribeClusterBrokers(entries []*DescribeClusterBroker) []*...
  function dependsOnSpecificNode (line 737) | func dependsOnSpecificNode(resource ConfigResource) bool {

FILE: admin_test.go
  function TestClusterAdmin (line 12) | func TestClusterAdmin(t *testing.T) {
  function TestClusterAdminInvalidController (line 35) | func TestClusterAdminInvalidController(t *testing.T) {
  function TestClusterAdminCreateTopic (line 59) | func TestClusterAdminCreateTopic(t *testing.T) {
  function TestClusterAdminCreateTopicWithInvalidTopicDetail (line 87) | func TestClusterAdminCreateTopicWithInvalidTopicDetail(t *testing.T) {
  function TestClusterAdminCreateTopicWithoutAuthorization (line 115) | func TestClusterAdminCreateTopicWithoutAuthorization(t *testing.T) {
  function TestClusterAdminListTopics (line 145) | func TestClusterAdminListTopics(t *testing.T) {
  function TestClusterAdminDeleteTopic (line 196) | func TestClusterAdminDeleteTopic(t *testing.T) {
  function TestClusterAdminDeleteEmptyTopic (line 225) | func TestClusterAdminDeleteEmptyTopic(t *testing.T) {
  function TestClusterAdminDeleteTopicError (line 254) | func TestClusterAdminDeleteTopicError(t *testing.T) {
  function TestClusterAdminCreatePartitions (line 283) | func TestClusterAdminCreatePartitions(t *testing.T) {
  function TestClusterAdminCreatePartitionsWithDiffVersion (line 312) | func TestClusterAdminCreatePartitionsWithDiffVersion(t *testing.T) {
  function TestClusterAdminCreatePartitionsWithoutAuthorization (line 341) | func TestClusterAdminCreatePartitionsWithoutAuthorization(t *testing.T) {
  function TestClusterAdminAlterPartitionReassignments (line 370) | func TestClusterAdminAlterPartitionReassignments(t *testing.T) {
  function TestClusterAdminAlterPartitionReassignmentsWithDiffVersion (line 410) | func TestClusterAdminAlterPartitionReassignmentsWithDiffVersion(t *testi...
  function TestClusterAdminListPartitionReassignments (line 449) | func TestClusterAdminListPartitionReassignments(t *testing.T) {
  function TestClusterAdminListPartitionReassignmentsWithDiffVersion (line 496) | func TestClusterAdminListPartitionReassignmentsWithDiffVersion(t *testin...
  function TestClusterAdminDeleteRecords (line 535) | func TestClusterAdminDeleteRecords(t *testing.T) {
  function TestClusterAdminDeleteRecordsWithInCorrectBroker (line 580) | func TestClusterAdminDeleteRecordsWithInCorrectBroker(t *testing.T) {
  function TestClusterAdminDeleteRecordsWithUnsupportedVersion (line 631) | func TestClusterAdminDeleteRecordsWithUnsupportedVersion(t *testing.T) {
  function TestClusterAdminDeleteRecordsWithLeaderNotAvailable (line 681) | func TestClusterAdminDeleteRecordsWithLeaderNotAvailable(t *testing.T) {
  function TestClusterAdminDescribeConfig (line 726) | func TestClusterAdminDescribeConfig(t *testing.T) {
  function TestClusterAdminDescribeConfigWithErrorCode (line 794) | func TestClusterAdminDescribeConfigWithErrorCode(t *testing.T) {
  function TestClusterAdminDescribeBrokerConfig (line 829) | func TestClusterAdminDescribeBrokerConfig(t *testing.T) {
  function TestClusterAdminAlterConfig (line 879) | func TestClusterAdminAlterConfig(t *testing.T) {
  function TestClusterAdminAlterConfigWithErrorCode (line 912) | func TestClusterAdminAlterConfigWithErrorCode(t *testing.T) {
  function TestClusterAdminAlterBrokerConfig (line 943) | func TestClusterAdminAlterBrokerConfig(t *testing.T) {
  function TestClusterAdminIncrementalAlterConfig (line 997) | func TestClusterAdminIncrementalAlterConfig(t *testing.T) {
  function TestClusterAdminIncrementalAlterConfigWithErrorCode (line 1038) | func TestClusterAdminIncrementalAlterConfigWithErrorCode(t *testing.T) {
  function TestClusterAdminIncrementalAlterBrokerConfig (line 1080) | func TestClusterAdminIncrementalAlterBrokerConfig(t *testing.T) {
  function TestClusterAdminCreateAcl (line 1142) | func TestClusterAdminCreateAcl(t *testing.T) {
  function TestClusterAdminCreateAclErrorHandling (line 1174) | func TestClusterAdminCreateAclErrorHandling(t *testing.T) {
  function TestClusterAdminCreateAcls (line 1206) | func TestClusterAdminCreateAcls(t *testing.T) {
  function TestClusterAdminListAcls (line 1250) | func TestClusterAdminListAcls(t *testing.T) {
  function TestClusterAdminDeleteAcl (line 1297) | func TestClusterAdminDeleteAcl(t *testing.T) {
  function TestElectLeaders (line 1333) | func TestElectLeaders(t *testing.T) {
  function TestDescribeTopic (line 1372) | func TestDescribeTopic(t *testing.T) {
  function TestDescribeTopicWithVersion0_11 (line 1410) | func TestDescribeTopicWithVersion0_11(t *testing.T) {
  function TestDescribeConsumerGroup (line 1448) | func TestDescribeConsumerGroup(t *testing.T) {
  function TestListConsumerGroups (line 1491) | func TestListConsumerGroups(t *testing.T) {
  function TestListConsumerGroupsMultiBroker (line 1536) | func TestListConsumerGroupsMultiBroker(t *testing.T) {
  function TestListConsumerGroupOffsets (line 1600) | func TestListConsumerGroupOffsets(t *testing.T) {
  function TestDeleteConsumerGroup (line 1647) | func TestDeleteConsumerGroup(t *testing.T) {
  function TestDeleteOffset (line 1677) | func TestDeleteOffset(t *testing.T) {
  function TestRefreshMetaDataWithDifferentController (line 1730) | func TestRefreshMetaDataWithDifferentController(t *testing.T) {
  function TestDescribeLogDirs (line 1781) | func TestDescribeLogDirs(t *testing.T) {
  function TestDescribeLogDirsUnknownBroker (line 1829) | func TestDescribeLogDirsUnknownBroker(t *testing.T) {
  function Test_retryOnError (line 1875) | func Test_retryOnError(t *testing.T) {

FILE: alter_client_quotas_request.go
  type AlterClientQuotasRequest (line 14) | type AlterClientQuotasRequest struct
    method setVersion (line 20) | func (a *AlterClientQuotasRequest) setVersion(v int16) {
    method encode (line 35) | func (a *AlterClientQuotasRequest) encode(pe packetEncoder) error {
    method decode (line 52) | func (a *AlterClientQuotasRequest) decode(pd packetDecoder, version in...
    method key (line 185) | func (a *AlterClientQuotasRequest) key() int16 {
    method version (line 189) | func (a *AlterClientQuotasRequest) version() int16 {
    method headerVersion (line 193) | func (a *AlterClientQuotasRequest) headerVersion() int16 {
    method isValidVersion (line 197) | func (a *AlterClientQuotasRequest) isValidVersion() bool {
    method requiredVersion (line 201) | func (a *AlterClientQuotasRequest) requiredVersion() KafkaVersion {
  type AlterClientQuotasEntry (line 24) | type AlterClientQuotasEntry struct
    method encode (line 81) | func (a *AlterClientQuotasEntry) encode(pe packetEncoder) error {
    method decode (line 105) | func (a *AlterClientQuotasEntry) decode(pd packetDecoder, version int1...
  type ClientQuotasOp (line 29) | type ClientQuotasOp struct
    method encode (line 145) | func (c *ClientQuotasOp) encode(pe packetEncoder) error {
    method decode (line 160) | func (c *ClientQuotasOp) decode(pd packetDecoder, version int16) error {

FILE: alter_client_quotas_request_test.go
  function TestAlterClientQuotasRequest (line 67) | func TestAlterClientQuotasRequest(t *testing.T) {

FILE: alter_client_quotas_response.go
  type AlterClientQuotasResponse (line 16) | type AlterClientQuotasResponse struct
    method setVersion (line 22) | func (a *AlterClientQuotasResponse) setVersion(v int16) {
    method encode (line 32) | func (a *AlterClientQuotasResponse) encode(pe packetEncoder) error {
    method decode (line 48) | func (a *AlterClientQuotasResponse) decode(pd packetDecoder, version i...
    method key (line 131) | func (a *AlterClientQuotasResponse) key() int16 {
    method version (line 135) | func (a *AlterClientQuotasResponse) version() int16 {
    method headerVersion (line 139) | func (a *AlterClientQuotasResponse) headerVersion() int16 {
    method isValidVersion (line 143) | func (a *AlterClientQuotasResponse) isValidVersion() bool {
    method requiredVersion (line 147) | func (a *AlterClientQuotasResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 151) | func (r *AlterClientQuotasResponse) throttleTime() time.Duration {
  type AlterClientQuotasEntryResponse (line 26) | type AlterClientQuotasEntryResponse struct
    method encode (line 74) | func (a *AlterClientQuotasEntryResponse) encode(pe packetEncoder) error {
    method decode (line 96) | func (a *AlterClientQuotasEntryResponse) decode(pd packetDecoder, vers...

FILE: alter_client_quotas_response_test.go
  function TestAlterClientQuotasResponse (line 44) | func TestAlterClientQuotasResponse(t *testing.T) {

FILE: alter_configs_request.go
  type AlterConfigsRequest (line 4) | type AlterConfigsRequest struct
    method setVersion (line 10) | func (a *AlterConfigsRequest) setVersion(v int16) {
    method encode (line 21) | func (a *AlterConfigsRequest) encode(pe packetEncoder) error {
    method decode (line 36) | func (a *AlterConfigsRequest) decode(pd packetDecoder, version int16) ...
    method key (line 117) | func (a *AlterConfigsRequest) key() int16 {
    method version (line 121) | func (a *AlterConfigsRequest) version() int16 {
    method headerVersion (line 125) | func (a *AlterConfigsRequest) headerVersion() int16 {
    method isValidVersion (line 129) | func (a *AlterConfigsRequest) isValidVersion() bool {
    method requiredVersion (line 133) | func (a *AlterConfigsRequest) requiredVersion() KafkaVersion {
  type AlterConfigsResource (line 15) | type AlterConfigsResource struct
    method encode (line 62) | func (a *AlterConfigsResource) encode(pe packetEncoder) error {
    method decode (line 84) | func (a *AlterConfigsResource) decode(pd packetDecoder, version int16)...

FILE: alter_configs_request_test.go
  function TestAlterConfigsRequest (line 45) | func TestAlterConfigsRequest(t *testing.T) {

FILE: alter_configs_response.go
  type AlterConfigsResponse (line 9) | type AlterConfigsResponse struct
    method setVersion (line 15) | func (a *AlterConfigsResponse) setVersion(v int16) {
    method encode (line 40) | func (a *AlterConfigsResponse) encode(pe packetEncoder) error {
    method decode (line 56) | func (a *AlterConfigsResponse) decode(pd packetDecoder, version int16)...
    method key (line 127) | func (a *AlterConfigsResponse) key() int16 {
    method version (line 131) | func (a *AlterConfigsResponse) version() int16 {
    method headerVersion (line 135) | func (a *AlterConfigsResponse) headerVersion() int16 {
    method isValidVersion (line 139) | func (a *AlterConfigsResponse) isValidVersion() bool {
    method requiredVersion (line 143) | func (a *AlterConfigsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 154) | func (r *AlterConfigsResponse) throttleTime() time.Duration {
  type AlterConfigError (line 19) | type AlterConfigError struct
    method Error (line 24) | func (c *AlterConfigError) Error() string {
  type AlterConfigsResourceResponse (line 33) | type AlterConfigsResourceResponse struct
    method encode (line 79) | func (a *AlterConfigsResourceResponse) encode(pe packetEncoder) error {
    method decode (line 94) | func (a *AlterConfigsResourceResponse) decode(pd packetDecoder, versio...

FILE: alter_configs_response_test.go
  function TestAlterConfigsResponse (line 25) | func TestAlterConfigsResponse(t *testing.T) {

FILE: alter_partition_reassignments_request.go
  type alterPartitionReassignmentsBlock (line 3) | type alterPartitionReassignmentsBlock struct
    method encode (line 7) | func (b *alterPartitionReassignmentsBlock) encode(pe packetEncoder) er...
    method decode (line 16) | func (b *alterPartitionReassignmentsBlock) decode(pd packetDecoder) (e...
  type AlterPartitionReassignmentsRequest (line 26) | type AlterPartitionReassignmentsRequest struct
    method setVersion (line 32) | func (r *AlterPartitionReassignmentsRequest) setVersion(v int16) {
    method encode (line 36) | func (r *AlterPartitionReassignmentsRequest) encode(pe packetEncoder) ...
    method decode (line 64) | func (r *AlterPartitionReassignmentsRequest) decode(pd packetDecoder, ...
    method key (line 108) | func (r *AlterPartitionReassignmentsRequest) key() int16 {
    method version (line 112) | func (r *AlterPartitionReassignmentsRequest) version() int16 {
    method headerVersion (line 116) | func (r *AlterPartitionReassignmentsRequest) headerVersion() int16 {
    method isValidVersion (line 120) | func (r *AlterPartitionReassignmentsRequest) isValidVersion() bool {
    method isFlexible (line 124) | func (r *AlterPartitionReassignmentsRequest) isFlexible() bool {
    method isFlexibleVersion (line 128) | func (r *AlterPartitionReassignmentsRequest) isFlexibleVersion(version...
    method requiredVersion (line 132) | func (r *AlterPartitionReassignmentsRequest) requiredVersion() KafkaVe...
    method AddBlock (line 136) | func (r *AlterPartitionReassignmentsRequest) AddBlock(topic string, pa...

FILE: alter_partition_reassignments_request_test.go
  function TestAlterPartitionReassignmentRequest (line 37) | func TestAlterPartitionReassignmentRequest(t *testing.T) {

FILE: alter_partition_reassignments_response.go
  type alterPartitionReassignmentsErrorBlock (line 5) | type alterPartitionReassignmentsErrorBlock struct
    method encode (line 10) | func (b *alterPartitionReassignmentsErrorBlock) encode(pe packetEncode...
    method decode (line 20) | func (b *alterPartitionReassignmentsErrorBlock) decode(pd packetDecode...
  type AlterPartitionReassignmentsResponse (line 34) | type AlterPartitionReassignmentsResponse struct
    method setVersion (line 42) | func (r *AlterPartitionReassignmentsResponse) setVersion(v int16) {
    method AddError (line 46) | func (r *AlterPartitionReassignmentsResponse) AddError(topic string, p...
    method encode (line 59) | func (r *AlterPartitionReassignmentsResponse) encode(pe packetEncoder)...
    method decode (line 90) | func (r *AlterPartitionReassignmentsResponse) decode(pd packetDecoder,...
    method key (line 148) | func (r *AlterPartitionReassignmentsResponse) key() int16 {
    method version (line 152) | func (r *AlterPartitionReassignmentsResponse) version() int16 {
    method headerVersion (line 156) | func (r *AlterPartitionReassignmentsResponse) headerVersion() int16 {
    method isValidVersion (line 160) | func (r *AlterPartitionReassignmentsResponse) isValidVersion() bool {
    method isFlexible (line 164) | func (r *AlterPartitionReassignmentsResponse) isFlexible() bool {
    method isFlexibleVersion (line 168) | func (r *AlterPartitionReassignmentsResponse) isFlexibleVersion(versio...
    method requiredVersion (line 172) | func (r *AlterPartitionReassignmentsResponse) requiredVersion() KafkaV...
    method throttleTime (line 176) | func (r *AlterPartitionReassignmentsResponse) throttleTime() time.Dura...

FILE: alter_partition_reassignments_response_test.go
  function TestAlterPartitionReassignmentResponse (line 30) | func TestAlterPartitionReassignmentResponse(t *testing.T) {

FILE: alter_user_scram_credentials_request.go
  type AlterUserScramCredentialsRequest (line 3) | type AlterUserScramCredentialsRequest struct
    method setVersion (line 13) | func (r *AlterUserScramCredentialsRequest) setVersion(v int16) {
    method encode (line 34) | func (r *AlterUserScramCredentialsRequest) encode(pe packetEncoder) er...
    method decode (line 77) | func (r *AlterUserScramCredentialsRequest) decode(pd packetDecoder, ve...
    method key (line 134) | func (r *AlterUserScramCredentialsRequest) key() int16 {
    method version (line 138) | func (r *AlterUserScramCredentialsRequest) version() int16 {
    method headerVersion (line 142) | func (r *AlterUserScramCredentialsRequest) headerVersion() int16 {
    method isValidVersion (line 146) | func (r *AlterUserScramCredentialsRequest) isValidVersion() bool {
    method isFlexible (line 150) | func (r *AlterUserScramCredentialsRequest) isFlexible() bool {
    method isFlexibleVersion (line 154) | func (r *AlterUserScramCredentialsRequest) isFlexibleVersion(version i...
    method requiredVersion (line 158) | func (r *AlterUserScramCredentialsRequest) requiredVersion() KafkaVers...
  type AlterUserScramCredentialsDelete (line 17) | type AlterUserScramCredentialsDelete struct
  type AlterUserScramCredentialsUpsert (line 22) | type AlterUserScramCredentialsUpsert struct

FILE: alter_user_scram_credentials_request_test.go
  function TestAlterUserScramCredentialsRequest (line 35) | func TestAlterUserScramCredentialsRequest(t *testing.T) {

FILE: alter_user_scram_credentials_response.go
  type AlterUserScramCredentialsResponse (line 5) | type AlterUserScramCredentialsResponse struct
    method setVersion (line 13) | func (r *AlterUserScramCredentialsResponse) setVersion(v int16) {
    method encode (line 24) | func (r *AlterUserScramCredentialsResponse) encode(pe packetEncoder) e...
    method decode (line 45) | func (r *AlterUserScramCredentialsResponse) decode(pd packetDecoder, v...
    method key (line 81) | func (r *AlterUserScramCredentialsResponse) key() int16 {
    method version (line 85) | func (r *AlterUserScramCredentialsResponse) version() int16 {
    method headerVersion (line 89) | func (r *AlterUserScramCredentialsResponse) headerVersion() int16 {
    method isValidVersion (line 93) | func (r *AlterUserScramCredentialsResponse) isValidVersion() bool {
    method isFlexible (line 97) | func (r *AlterUserScramCredentialsResponse) isFlexible() bool {
    method isFlexibleVersion (line 101) | func (r *AlterUserScramCredentialsResponse) isFlexibleVersion(version ...
    method requiredVersion (line 105) | func (r *AlterUserScramCredentialsResponse) requiredVersion() KafkaVer...
    method throttleTime (line 109) | func (r *AlterUserScramCredentialsResponse) throttleTime() time.Durati...
  type AlterUserScramCredentialsResult (line 17) | type AlterUserScramCredentialsResult struct

FILE: alter_user_scram_credentials_response_test.go
  function TestAlterUserScramCredentialsResponse (line 27) | func TestAlterUserScramCredentialsResponse(t *testing.T) {

FILE: api_versions.go
  type apiVersionRange (line 3) | type apiVersionRange struct
  type apiVersionMap (line 8) | type apiVersionMap
  function restrictApiVersion (line 15) | func restrictApiVersion(pb protocolBody, brokerVersions apiVersionMap) e...
  constant apiKeyProduce (line 32) | apiKeyProduce                      = 0
  constant apiKeyFetch (line 33) | apiKeyFetch                        = 1
  constant apiKeyListOffsets (line 34) | apiKeyListOffsets                  = 2
  constant apiKeyMetadata (line 35) | apiKeyMetadata                     = 3
  constant apiKeyLeaderAndIsr (line 36) | apiKeyLeaderAndIsr                 = 4
  constant apiKeyStopReplica (line 37) | apiKeyStopReplica                  = 5
  constant apiKeyUpdateMetadata (line 38) | apiKeyUpdateMetadata               = 6
  constant apiKeyControlledShutdown (line 39) | apiKeyControlledShutdown           = 7
  constant apiKeyOffsetCommit (line 40) | apiKeyOffsetCommit                 = 8
  constant apiKeyOffsetFetch (line 41) | apiKeyOffsetFetch                  = 9
  constant apiKeyFindCoordinator (line 42) | apiKeyFindCoordinator              = 10
  constant apiKeyJoinGroup (line 43) | apiKeyJoinGroup                    = 11
  constant apiKeyHeartbeat (line 44) | apiKeyHeartbeat                    = 12
  constant apiKeyLeaveGroup (line 45) | apiKeyLeaveGroup                   = 13
  constant apiKeySyncGroup (line 46) | apiKeySyncGroup                    = 14
  constant apiKeyDescribeGroups (line 47) | apiKeyDescribeGroups               = 15
  constant apiKeyListGroups (line 48) | apiKeyListGroups                   = 16
  constant apiKeySaslHandshake (line 49) | apiKeySaslHandshake                = 17
  constant apiKeyApiVersions (line 50) | apiKeyApiVersions                  = 18
  constant apiKeyCreateTopics (line 51) | apiKeyCreateTopics                 = 19
  constant apiKeyDeleteTopics (line 52) | apiKeyDeleteTopics                 = 20
  constant apiKeyDeleteRecords (line 53) | apiKeyDeleteRecords                = 21
  constant apiKeyInitProducerId (line 54) | apiKeyInitProducerId               = 22
  constant apiKeyOffsetForLeaderEpoch (line 55) | apiKeyOffsetForLeaderEpoch         = 23
  constant apiKeyAddPartitionsToTxn (line 56) | apiKeyAddPartitionsToTxn           = 24
  constant apiKeyAddOffsetsToTxn (line 57) | apiKeyAddOffsetsToTxn              = 25
  constant apiKeyEndTxn (line 58) | apiKeyEndTxn                       = 26
  constant apiKeyWriteTxnMarkers (line 59) | apiKeyWriteTxnMarkers              = 27
  constant apiKeyTxnOffsetCommit (line 60) | apiKeyTxnOffsetCommit              = 28
  constant apiKeyDescribeAcls (line 61) | apiKeyDescribeAcls                 = 29
  constant apiKeyCreateAcls (line 62) | apiKeyCreateAcls                   = 30
  constant apiKeyDeleteAcls (line 63) | apiKeyDeleteAcls                   = 31
  constant apiKeyDescribeConfigs (line 64) | apiKeyDescribeConfigs              = 32
  constant apiKeyAlterConfigs (line 65) | apiKeyAlterConfigs                 = 33
  constant apiKeyAlterReplicaLogDirs (line 66) | apiKeyAlterReplicaLogDirs          = 34
  constant apiKeyDescribeLogDirs (line 67) | apiKeyDescribeLogDirs              = 35
  constant apiKeySASLAuth (line 68) | apiKeySASLAuth                     = 36
  constant apiKeyCreatePartitions (line 69) | apiKeyCreatePartitions             = 37
  constant apiKeyCreateDelegationToken (line 70) | apiKeyCreateDelegationToken        = 38
  constant apiKeyRenewDelegationToken (line 71) | apiKeyRenewDelegationToken         = 39
  constant apiKeyExpireDelegationToken (line 72) | apiKeyExpireDelegationToken        = 40
  constant apiKeyDescribeDelegationToken (line 73) | apiKeyDescribeDelegationToken      = 41
  constant apiKeyDeleteGroups (line 74) | apiKeyDeleteGroups                 = 42
  constant apiKeyElectLeaders (line 75) | apiKeyElectLeaders                 = 43
  constant apiKeyIncrementalAlterConfigs (line 76) | apiKeyIncrementalAlterConfigs      = 44
  constant apiKeyAlterPartitionReassignments (line 77) | apiKeyAlterPartitionReassignments  = 45
  constant apiKeyListPartitionReassignments (line 78) | apiKeyListPartitionReassignments   = 46
  constant apiKeyOffsetDelete (line 79) | apiKeyOffsetDelete                 = 47
  constant apiKeyDescribeClientQuotas (line 80) | apiKeyDescribeClientQuotas         = 48
  constant apiKeyAlterClientQuotas (line 81) | apiKeyAlterClientQuotas            = 49
  constant apiKeyDescribeUserScramCredentials (line 82) | apiKeyDescribeUserScramCredentials = 50
  constant apiKeyAlterUserScramCredentials (line 83) | apiKeyAlterUserScramCredentials    = 51
  constant apiKeyDescribeCluster (line 84) | apiKeyDescribeCluster              = 60

FILE: api_versions_request.go
  constant defaultClientSoftwareName (line 3) | defaultClientSoftwareName = "sarama"
  type ApiVersionsRequest (line 5) | type ApiVersionsRequest struct
    method setVersion (line 14) | func (r *ApiVersionsRequest) setVersion(v int16) {
    method encode (line 18) | func (r *ApiVersionsRequest) encode(pe packetEncoder) (err error) {
    method decode (line 32) | func (r *ApiVersionsRequest) decode(pd packetDecoder, version int16) (...
    method key (line 47) | func (r *ApiVersionsRequest) key() int16 {
    method version (line 51) | func (r *ApiVersionsRequest) version() int16 {
    method headerVersion (line 55) | func (r *ApiVersionsRequest) headerVersion() int16 {
    method isValidVersion (line 62) | func (r *ApiVersionsRequest) isValidVersion() bool {
    method isFlexible (line 66) | func (r *ApiVersionsRequest) isFlexible() bool {
    method isFlexibleVersion (line 70) | func (r *ApiVersionsRequest) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 74) | func (r *ApiVersionsRequest) requiredVersion() KafkaVersion {

FILE: api_versions_request_test.go
  function TestApiVersionsRequest (line 17) | func TestApiVersionsRequest(t *testing.T) {
  function TestApiVersionsRequestV3 (line 22) | func TestApiVersionsRequestV3(t *testing.T) {

FILE: api_versions_response.go
  type ApiVersionsResponseKey (line 8) | type ApiVersionsResponseKey struct
    method encode (line 19) | func (a *ApiVersionsResponseKey) encode(pe packetEncoder, version int1...
    method decode (line 34) | func (a *ApiVersionsResponseKey) decode(pd packetDecoder, version int1...
  type ApiVersionsResponse (line 52) | type ApiVersionsResponse struct
    method setVersion (line 63) | func (r *ApiVersionsResponse) setVersion(v int16) {
    method encode (line 67) | func (r *ApiVersionsResponse) encode(pe packetEncoder) (err error) {
    method decode (line 90) | func (r *ApiVersionsResponse) decode(pd packetDecoder, version int16) ...
    method key (line 128) | func (r *ApiVersionsResponse) key() int16 {
    method version (line 132) | func (r *ApiVersionsResponse) version() int16 {
    method headerVersion (line 136) | func (r *ApiVersionsResponse) headerVersion() int16 {
    method isValidVersion (line 142) | func (r *ApiVersionsResponse) isValidVersion() bool {
    method isFlexible (line 146) | func (r *ApiVersionsResponse) isFlexible() bool {
    method isFlexibleVersion (line 150) | func (r *ApiVersionsResponse) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 154) | func (r *ApiVersionsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 169) | func (r *ApiVersionsResponse) throttleTime() time.Duration {

FILE: api_versions_response_test.go
  function TestApiVersionsResponseV0 (line 78) | func TestApiVersionsResponseV0(t *testing.T) {
  function TestApiVersionsResponseV1V2 (line 92) | func TestApiVersionsResponseV1V2(t *testing.T) {
  function TestApiVersionsResponseV3 (line 110) | func TestApiVersionsResponseV3(t *testing.T) {
  function TestApiVersionsResponseUnsupportedVersion (line 127) | func TestApiVersionsResponseUnsupportedVersion(t *testing.T) {

FILE: api_versions_test.go
  function TestRestrictApiVersionLowersVersionToBrokerMax (line 5) | func TestRestrictApiVersionLowersVersionToBrokerMax(t *testing.T) {
  function TestRestrictApiVersionLeavesVersionUnchangedWhenWithinRange (line 29) | func TestRestrictApiVersionLeavesVersionUnchangedWhenWithinRange(t *test...
  function TestRestrictApiVersionDoesNotRaiseVersionBeyondUserSetMax (line 54) | func TestRestrictApiVersionDoesNotRaiseVersionBeyondUserSetMax(t *testin...
  function TestRestrictApiVersionDoesNothingIfBrokerVersionRangeMissing (line 81) | func TestRestrictApiVersionDoesNothingIfBrokerVersionRangeMissing(t *tes...

FILE: async_producer.go
  constant minFunctionalRetryBufferLength (line 23) | minFunctionalRetryBufferLength = 4 * 1024
  constant minFunctionalRetryBufferBytes (line 27) | minFunctionalRetryBufferBytes = 32 * 1024 * 1024
  type AsyncProducer (line 36) | type AsyncProducer interface
  type asyncProducer (line 88) | type asyncProducer struct
    method IsTransactional (line 434) | func (p *asyncProducer) IsTransactional() bool {
    method AddMessageToTxn (line 438) | func (p *asyncProducer) AddMessageToTxn(msg *ConsumerMessage, groupId ...
    method AddOffsetsToTxn (line 450) | func (p *asyncProducer) AddOffsetsToTxn(offsets map[string][]*Partitio...
    method TxnStatus (line 463) | func (p *asyncProducer) TxnStatus() ProducerTxnStatusFlag {
    method BeginTxn (line 467) | func (p *asyncProducer) BeginTxn() error {
    method CommitTxn (line 479) | func (p *asyncProducer) CommitTxn() error {
    method AbortTxn (line 497) | func (p *asyncProducer) AbortTxn() error {
    method finishTransaction (line 514) | func (p *asyncProducer) finishTransaction(commit bool) error {
    method Errors (line 525) | func (p *asyncProducer) Errors() <-chan *ProducerError {
    method Successes (line 529) | func (p *asyncProducer) Successes() <-chan *ProducerMessage {
    method Input (line 533) | func (p *asyncProducer) Input() chan<- *ProducerMessage {
    method Close (line 537) | func (p *asyncProducer) Close() error {
    method AsyncClose (line 562) | func (p *asyncProducer) AsyncClose() {
    method dispatcher (line 568) | func (p *asyncProducer) dispatcher() {
    method newTopicProducer (line 664) | func (p *asyncProducer) newTopicProducer(topic string) chan<- *Produce...
    method newPartitionProducer (line 768) | func (p *asyncProducer) newPartitionProducer(topic string, partition i...
    method newBrokerProducer (line 957) | func (p *asyncProducer) newBrokerProducer(broker *Broker) *brokerProdu...
    method retryBatch (line 1438) | func (p *asyncProducer) retryBatch(topic string, partition int32, pSet...
    method retryHandler (line 1544) | func (p *asyncProducer) retryHandler() {
    method shutdown (line 1605) | func (p *asyncProducer) shutdown() {
    method bumpIdempotentProducerEpoch (line 1627) | func (p *asyncProducer) bumpIdempotentProducerEpoch() {
    method maybeTransitionToErrorState (line 1643) | func (p *asyncProducer) maybeTransitionToErrorState(err error) error {
    method returnError (line 1656) | func (p *asyncProducer) returnError(msg *ProducerMessage, err error) {
    method returnErrors (line 1677) | func (p *asyncProducer) returnErrors(batch []*ProducerMessage, err err...
    method returnSuccesses (line 1683) | func (p *asyncProducer) returnSuccesses(batch []*ProducerMessage) {
    method retryMessage (line 1693) | func (p *asyncProducer) retryMessage(msg *ProducerMessage, err error) {
    method retryMessages (line 1702) | func (p *asyncProducer) retryMessages(batch []*ProducerMessage, err er...
    method getBrokerProducer (line 1708) | func (p *asyncProducer) getBrokerProducer(broker *Broker) *brokerProdu...
    method unrefBrokerProducer (line 1725) | func (p *asyncProducer) unrefBrokerProducer(broker *Broker, bp *broker...
    method abandonBrokerConnection (line 1740) | func (p *asyncProducer) abandonBrokerConnection(broker *Broker) {
  type partitionMuter (line 110) | type partitionMuter struct
    method isMuted (line 129) | func (m *partitionMuter) isMuted(topic string, partition int32) bool {
    method isAnyMuted (line 135) | func (m *partitionMuter) isAnyMuted(set *produceSet) bool {
    method mutePartition (line 143) | func (m *partitionMuter) mutePartition(topic string, partition int32) {
    method muteSet (line 152) | func (m *partitionMuter) muteSet(set *produceSet) {
    method tryMute (line 161) | func (m *partitionMuter) tryMute(set *produceSet) bool {
    method tryMutePartition (line 176) | func (m *partitionMuter) tryMutePartition(topic string, partition int3...
    method waitUntilMuted (line 189) | func (m *partitionMuter) waitUntilMuted(set *produceSet) bool {
    method awaitUnmuteChan (line 211) | func (m *partitionMuter) awaitUnmuteChan(set *produceSet) (<-chan stru...
    method unmute (line 226) | func (m *partitionMuter) unmute(set *produceSet) {
    method close (line 258) | func (m *partitionMuter) close() {
  function newPartitionMuter (line 118) | func newPartitionMuter() *partitionMuter {
  function NewAsyncProducer (line 271) | func NewAsyncProducer(addrs []string, conf *Config) (AsyncProducer, erro...
  function NewAsyncProducerFromClient (line 281) | func NewAsyncProducerFromClient(client Client) (AsyncProducer, error) {
  function newAsyncProducer (line 288) | func newAsyncProducer(client Client) (AsyncProducer, error) {
  type flagSet (line 320) | type flagSet
  constant syn (line 323) | syn       flagSet = 1 << iota
  constant fin (line 324) | fin
  constant shutdown (line 325) | shutdown
  constant endtxn (line 326) | endtxn
  constant committxn (line 327) | committxn
  constant aborttxn (line 328) | aborttxn
  type ProducerMessage (line 332) | type ProducerMessage struct
    method ByteSize (line 383) | func (m *ProducerMessage) ByteSize(version int) int {
    method clear (line 402) | func (m *ProducerMessage) clear() {
  constant producerMessageOverhead (line 381) | producerMessageOverhead = 26
  type ProducerError (line 412) | type ProducerError struct
    method Error (line 417) | func (pe ProducerError) Error() string {
    method Unwrap (line 421) | func (pe ProducerError) Unwrap() error {
  type ProducerErrors (line 428) | type ProducerErrors
    method Error (line 430) | func (pe ProducerErrors) Error() string {
  type topicProducer (line 654) | type topicProducer struct
    method dispatch (line 678) | func (tp *topicProducer) dispatch() {
    method partitionMessage (line 701) | func (tp *topicProducer) partitionMessage(msg *ProducerMessage) error {
  type partitionProducer (line 745) | type partitionProducer struct
    method backoff (line 783) | func (pp *partitionProducer) backoff(retries int) {
    method updateLeaderIfBrokerProducerIsNil (line 796) | func (pp *partitionProducer) updateLeaderIfBrokerProducerIsNil(msg *Pr...
    method dispatch (line 808) | func (pp *partitionProducer) dispatch() {
    method newHighWatermark (line 889) | func (pp *partitionProducer) newHighWatermark(hwm int) {
    method flushRetryBuffers (line 905) | func (pp *partitionProducer) flushRetryBuffers() {
    method updateLeader (line 938) | func (pp *partitionProducer) updateLeader() error {
  type partitionRetryState (line 763) | type partitionRetryState struct
  type brokerProducerResponse (line 1068) | type brokerProducerResponse struct
  type brokerProducer (line 1076) | type brokerProducer struct
    method run (line 1094) | func (bp *brokerProducer) run() {
    method tryBuildFlushingBatch (line 1194) | func (bp *brokerProducer) tryBuildFlushingBatch() bool {
    method shutdown (line 1217) | func (bp *brokerProducer) shutdown() {
    method needsRetry (line 1258) | func (bp *brokerProducer) needsRetry(msg *ProducerMessage) error {
    method waitForSpace (line 1267) | func (bp *brokerProducer) waitForSpace(msg *ProducerMessage, forceRoll...
    method rollOver (line 1315) | func (bp *brokerProducer) rollOver() {
    method handleResponse (line 1324) | func (bp *brokerProducer) handleResponse(response *brokerProducerRespo...
    method handleSuccess (line 1336) | func (bp *brokerProducer) handleSuccess(sent *produceSet, response *Pr...
    method handleError (line 1481) | func (bp *brokerProducer) handleError(sent *produceSet, err error) {

FILE: async_producer_test.go
  function expectResultsWithTimeout (line 24) | func expectResultsWithTimeout(t *testing.T, p AsyncProducer, successCoun...
  function expectResults (line 60) | func expectResults(t *testing.T, p AsyncProducer, successCount, errorCou...
  function TestPartitionProducerFlushRetryBuffersAssignsSequence (line 64) | func TestPartitionProducerFlushRetryBuffersAssignsSequence(t *testing.T) {
  type testPartitioner (line 107) | type testPartitioner
    method Partition (line 109) | func (p testPartitioner) Partition(msg *ProducerMessage, numPartitions...
    method RequiresConsistency (line 118) | func (p testPartitioner) RequiresConsistency() bool {
    method feed (line 122) | func (p testPartitioner) feed(partition int32) {
  type flakyEncoder (line 126) | type flakyEncoder
    method Length (line 128) | func (f flakyEncoder) Length() int {
    method Encode (line 132) | func (f flakyEncoder) Encode() ([]byte, error) {
  function TestAsyncProducer (line 139) | func TestAsyncProducer(t *testing.T) {
  function TestAsyncProducerMultipleFlushes (line 188) | func TestAsyncProducerMultipleFlushes(t *testing.T) {
  function TestAsyncProducerMultipleBrokers (line 223) | func TestAsyncProducerMultipleBrokers(t *testing.T) {
  function TestAsyncProducerCustomPartitioner (line 263) | func TestAsyncProducerCustomPartitioner(t *testing.T) {
  function TestAsyncProducerFailureRetry (line 305) | func TestAsyncProducerFailureRetry(t *testing.T) {
  function TestAsyncProducerRecoveryWithRetriesDisabled (line 353) | func TestAsyncProducerRecoveryWithRetriesDisabled(t *testing.T) {
  function TestAsyncProducerEncoderFailures (line 439) | func TestAsyncProducerEncoderFailures(t *testing.T) {
  function TestAsyncProducerBrokerBounce (line 477) | func TestAsyncProducerBrokerBounce(t *testing.T) {
  function TestAsyncProducerBrokerBounceWithStaleMetadata (line 518) | func TestAsyncProducerBrokerBounceWithStaleMetadata(t *testing.T) {
  function TestAsyncProducerMultipleRetries (line 561) | func TestAsyncProducerMultipleRetries(t *testing.T) {
  function TestAsyncProducerMultipleRetriesWithBackoffFunc (line 617) | func TestAsyncProducerMultipleRetriesWithBackoffFunc(t *testing.T) {
  function TestAsyncProducerWithExponentialBackoffDurations (line 689) | func TestAsyncProducerWithExponentialBackoffDurations(t *testing.T) {
  function TestAsyncProducerMultipleRetriesWithConcurrentRequests (line 752) | func TestAsyncProducerMultipleRetriesWithConcurrentRequests(t *testing.T) {
  function TestAsyncProducerBrokerRestart (line 800) | func TestAsyncProducerBrokerRestart(t *testing.T) {
  function TestAsyncProducerOutOfRetries (line 917) | func TestAsyncProducerOutOfRetries(t *testing.T) {
  function TestAsyncProducerRetryWithReferenceOpen (line 974) | func TestAsyncProducerRetryWithReferenceOpen(t *testing.T) {
  function TestAsyncProducerFlusherRetryCondition (line 1031) | func TestAsyncProducerFlusherRetryCondition(t *testing.T) {
  function TestAsyncProducerRetryShutdown (line 1097) | func TestAsyncProducerRetryShutdown(t *testing.T) {
  function TestAsyncProducerNoReturns (line 1146) | func TestAsyncProducerNoReturns(t *testing.T) {
  function TestAsyncProducerIdempotentGoldenPath (line 1186) | func TestAsyncProducerIdempotentGoldenPath(t *testing.T) {
  function TestAsyncProducerIdempotentRetryCheckBatch (line 1234) | func TestAsyncProducerIdempotentRetryCheckBatch(t *testing.T) {
  function TestAsyncProducerIdempotentRetryCheckBatch_2378 (line 1382) | func TestAsyncProducerIdempotentRetryCheckBatch_2378(t *testing.T) {
  function TestAsyncProducerIdempotentErrorOnOutOfSeq (line 1450) | func TestAsyncProducerIdempotentErrorOnOutOfSeq(t *testing.T) {
  function TestAsyncProducerIdempotentEpochRollover (line 1499) | func TestAsyncProducerIdempotentEpochRollover(t *testing.T) {
  function TestAsyncProducerIdempotentEpochExhaustion (line 1570) | func TestAsyncProducerIdempotentEpochExhaustion(t *testing.T) {
  function TestBrokerProducerShutdown (line 1649) | func TestBrokerProducerShutdown(t *testing.T) {
  function TestBrokerProducerWaitForSpaceEmptyBufferRollover (line 1682) | func TestBrokerProducerWaitForSpaceEmptyBufferRollover(t *testing.T) {
  function awaitMuterBlocked (line 1712) | func awaitMuterBlocked(t *testing.T, m *partitionMuter, set *produceSet) {
  function assertNotDone (line 1726) | func assertNotDone[T any](t *testing.T, ch <-chan T, wait time.Duration) {
  function assertDoneWithin (line 1736) | func assertDoneWithin[T any](t *testing.T, ch <-chan T, timeout time.Dur...
  function TestBrokerProducerWaitForSpaceRespectsExternalUnmute (line 1750) | func TestBrokerProducerWaitForSpaceRespectsExternalUnmute(t *testing.T) {
  function TestBrokerProducerFlushSkipsMutedPartitions (line 1797) | func TestBrokerProducerFlushSkipsMutedPartitions(t *testing.T) {
  function TestBrokerProducerWaitForSpaceAllPartitionsMuted (line 1839) | func TestBrokerProducerWaitForSpaceAllPartitionsMuted(t *testing.T) {
  function TestPartitionMuterCloseWakesWaitUntilMuted (line 1874) | func TestPartitionMuterCloseWakesWaitUntilMuted(t *testing.T) {
  function TestBrokerProducerRollOverClearsTimer (line 1911) | func TestBrokerProducerRollOverClearsTimer(t *testing.T) {
  function TestRetryBatchRespectsPartitionMuter (line 1968) | func TestRetryBatchRespectsPartitionMuter(t *testing.T) {
  type stubLeaderClient (line 2021) | type stubLeaderClient struct
    method Config (line 2026) | func (c *stubLeaderClient) Config() *Config                           ...
    method Controller (line 2027) | func (c *stubLeaderClient) Controller() (*Broker, error)              ...
    method RefreshController (line 2028) | func (c *stubLeaderClient) RefreshController() (*Broker, error)       ...
    method Brokers (line 2029) | func (c *stubLeaderClient) Brokers() []*Broker                        ...
    method Broker (line 2030) | func (c *stubLeaderClient) Broker(int32) (*Broker, error)             ...
    method Topics (line 2031) | func (c *stubLeaderClient) Topics() ([]string, error)                 ...
    method Partitions (line 2032) | func (c *stubLeaderClient) Partitions(string) ([]int32, error)        ...
    method WritablePartitions (line 2033) | func (c *stubLeaderClient) WritablePartitions(string) ([]int32, error)...
    method Leader (line 2034) | func (c *stubLeaderClient) Leader(topic string, partitionID int32) (*B...
    method LeaderAndEpoch (line 2037) | func (c *stubLeaderClient) LeaderAndEpoch(string, int32) (*Broker, int...
    method Replicas (line 2040) | func (c *stubLeaderClient) Replicas(string, int32) ([]int32, error)   ...
    method InSyncReplicas (line 2041) | func (c *stubLeaderClient) InSyncReplicas(string, int32) ([]int32, err...
    method OfflineReplicas (line 2042) | func (c *stubLeaderClient) OfflineReplicas(string, int32) ([]int32, er...
    method RefreshBrokers (line 2043) | func (c *stubLeaderClient) RefreshBrokers([]string) error             ...
    method RefreshMetadata (line 2044) | func (c *stubLeaderClient) RefreshMetadata(...string) error           ...
    method GetOffset (line 2045) | func (c *stubLeaderClient) GetOffset(string, int32, int64) (int64, err...
    method Coordinator (line 2046) | func (c *stubLeaderClient) Coordinator(string) (*Broker, error)       ...
    method RefreshCoordinator (line 2047) | func (c *stubLeaderClient) RefreshCoordinator(string) error           ...
    method TransactionCoordinator (line 2048) | func (c *stubLeaderClient) TransactionCoordinator(string) (*Broker, er...
    method RefreshTransactionCoordinator (line 2049) | func (c *stubLeaderClient) RefreshTransactionCoordinator(string) error...
    method InitProducerID (line 2050) | func (c *stubLeaderClient) InitProducerID() (*InitProducerIDResponse, ...
    method LeastLoadedBroker (line 2051) | func (c *stubLeaderClient) LeastLoadedBroker() *Broker                ...
    method PartitionNotReadable (line 2052) | func (c *stubLeaderClient) PartitionNotReadable(string, int32) bool   ...
    method Close (line 2053) | func (c *stubLeaderClient) Close() error                              ...
    method Closed (line 2054) | func (c *stubLeaderClient) Closed() bool                              ...
  function testProducerInterceptor (line 2056) | func testProducerInterceptor(
  function TestAsyncProducerInterceptors (line 2099) | func TestAsyncProducerInterceptors(t *testing.T) {
  function TestProducerError (line 2157) | func TestProducerError(t *testing.T) {
  function TestTxmngInitProducerId (line 2165) | func TestTxmngInitProducerId(t *testing.T) {
  function TestTxnProduceBumpEpoch (line 2198) | func TestTxnProduceBumpEpoch(t *testing.T) {
  function TestTxnProduceRecordWithCommit (line 2300) | func TestTxnProduceRecordWithCommit(t *testing.T) {
  function TestTxnProduceBatchAddPartition (line 2375) | func TestTxnProduceBatchAddPartition(t *testing.T) {
  function TestTxnProduceRecordWithAbort (line 2488) | func TestTxnProduceRecordWithAbort(t *testing.T) {
  function TestTxnCanAbort (line 2563) | func TestTxnCanAbort(t *testing.T) {
  function TestProducerRetryBufferLimits (line 2673) | func TestProducerRetryBufferLimits(t *testing.T) {
  function ExampleAsyncProducer_select (line 2780) | func ExampleAsyncProducer_select() {
  function ExampleAsyncProducer_goroutines (line 2817) | func ExampleAsyncProducer_goroutines() {
  function TestAsyncProducerRetryOrdering (line 2871) | func TestAsyncProducerRetryOrdering(t *testing.T) {
  function TestAsyncProducerPartitionUnmuting (line 2998) | func TestAsyncProducerPartitionUnmuting(t *testing.T) {

FILE: balance_strategy.go
  constant RangeBalanceStrategyName (line 16) | RangeBalanceStrategyName = "range"
  constant RoundRobinBalanceStrategyName (line 19) | RoundRobinBalanceStrategyName = "roundrobin"
  constant StickyBalanceStrategyName (line 22) | StickyBalanceStrategyName = "sticky"
  constant defaultGeneration (line 24) | defaultGeneration = -1
  type BalanceStrategyPlan (line 30) | type BalanceStrategyPlan
    method Add (line 33) | func (p BalanceStrategyPlan) Add(memberID, topic string, partitions .....
  type BalanceStrategy (line 47) | type BalanceStrategy interface
  function NewBalanceStrategyRange (line 71) | func NewBalanceStrategyRange() BalanceStrategy {
  function NewBalanceStrategySticky (line 109) | func NewBalanceStrategySticky() BalanceStrategy {
  type balanceStrategy (line 118) | type balanceStrategy struct
    method Name (line 124) | func (s *balanceStrategy) Name() string { return s.name }
    method Plan (line 127) | func (s *balanceStrategy) Plan(members map[string]ConsumerGroupMemberM...
    method AssignmentData (line 162) | func (s *balanceStrategy) AssignmentData(memberID string, topics map[s...
  type stickyBalanceStrategy (line 166) | type stickyBalanceStrategy struct
    method Name (line 171) | func (s *stickyBalanceStrategy) Name() string { return StickyBalanceSt...
    method Plan (line 174) | func (s *stickyBalanceStrategy) Plan(members map[string]ConsumerGroupM...
    method AssignmentData (line 277) | func (s *stickyBalanceStrategy) AssignmentData(memberID string, topics...
    method balance (line 285) | func (s *stickyBalanceStrategy) balance(currentAssignment map[string][...
    method performReassignments (line 491) | func (s *stickyBalanceStrategy) performReassignments(reassignableParti...
    method reassignPartitionToNewConsumer (line 542) | func (s *stickyBalanceStrategy) reassignPartitionToNewConsumer(partiti...
    method reassignPartition (line 552) | func (s *stickyBalanceStrategy) reassignPartition(partition topicParti...
    method processPartitionMovement (line 560) | func (s *stickyBalanceStrategy) processPartitionMovement(partition top...
  function NewBalanceStrategyRoundRobin (line 337) | func NewBalanceStrategyRoundRobin() BalanceStrategy {
  type roundRobinBalancer (line 344) | type roundRobinBalancer struct
    method Name (line 346) | func (b *roundRobinBalancer) Name() string {
    method Plan (line 350) | func (b *roundRobinBalancer) Plan(memberAndMetadata map[string]Consume...
    method AssignmentData (line 401) | func (b *roundRobinBalancer) AssignmentData(memberID string, topics ma...
  type topicAndPartition (line 405) | type topicAndPartition struct
    method comparedValue (line 410) | func (tp *topicAndPartition) comparedValue() string {
  type memberAndTopic (line 414) | type memberAndTopic struct
    method hasTopic (line 419) | func (m *memberAndTopic) hasTopic(topic string) bool {
  function getBalanceScore (line 427) | func getBalanceScore(assignment map[string][]topicPartitionAssignment) i...
  function isBalanced (line 444) | func isBalanced(currentAssignment map[string][]topicPartitionAssignment,...
  function canConsumerParticipateInReassignment (line 571) | func canConsumerParticipateInReassignment(memberID string, currentAssign...
  function canTopicPartitionParticipateInReassignment (line 591) | func canTopicPartitionParticipateInReassignment(partition topicPartition...
  function assignPartition (line 596) | func assignPartition(partition topicPartitionAssignment, sortedCurrentSu...
  function deserializeTopicPartitionAssignment (line 608) | func deserializeTopicPartitionAssignment(userDataBytes []byte) (StickyAs...
  function filterAssignedPartitions (line 622) | func filterAssignedPartitions(currentAssignment map[string][]topicPartit...
  function removeTopicPartitionFromMemberAssignments (line 638) | func removeTopicPartitionFromMemberAssignments(assignments []topicPartit...
  function memberAssignmentsIncludeTopicPartition (line 647) | func memberAssignmentsIncludeTopicPartition(assignments []topicPartition...
  function sortPartitions (line 651) | func sortPartitions(currentAssignment map[string][]topicPartitionAssignm...
  function sortMemberIDsByPartitionAssignments (line 715) | func sortMemberIDsByPartitionAssignments(assignments map[string][]topicP...
  function sortPartitionsByPotentialConsumerAssignments (line 731) | func sortPartitionsByPotentialConsumerAssignments(partition2AllPotential...
  function deepCopyAssignment (line 752) | func deepCopyAssignment(assignment map[string][]topicPartitionAssignment...
  function areSubscriptionsIdentical (line 760) | func areSubscriptionsIdentical(partition2AllPotentialConsumers map[topic...
  function prepopulateCurrentAssignments (line 816) | func prepopulateCurrentAssignments(members map[string]ConsumerGroupMembe...
  type consumerGenerationPair (line 879) | type consumerGenerationPair struct
  type consumerPair (line 885) | type consumerPair struct
  type partitionMovements (line 891) | type partitionMovements struct
    method removeMovementRecordOfPartition (line 896) | func (p *partitionMovements) removeMovementRecordOfPartition(partition...
    method addPartitionMovementRecord (line 911) | func (p *partitionMovements) addPartitionMovementRecord(partition topi...
    method movePartition (line 923) | func (p *partitionMovements) movePartition(partition topicPartitionAss...
    method getTheActualPartitionToBeMoved (line 946) | func (p *partitionMovements) getTheActualPartitionToBeMoved(partition ...
    method isLinked (line 974) | func (p *partitionMovements) isLinked(src, dst string, pairs []consume...
    method in (line 1009) | func (p *partitionMovements) in(cycle []string, cycles [][]string) bool {
    method hasCycles (line 1024) | func (p *partitionMovements) hasCycles(pairs []consumerPair) bool {
    method isSticky (line 1056) | func (p *partitionMovements) isSticky() bool {
  function indexOfSubList (line 1074) | func indexOfSubList(source []string, target []string) int {
  type consumerGroupMember (line 1093) | type consumerGroupMember struct
  type assignmentPriorityQueue (line 1100) | type assignmentPriorityQueue
    method Len (line 1102) | func (pq assignmentPriorityQueue) Len() int { return len(pq) }
    method Less (line 1104) | func (pq assignmentPriorityQueue) Less(i, j int) bool {
    method Swap (line 1112) | func (pq assignmentPriorityQueue) Swap(i, j int) {
    method Push (line 1116) | func (pq *assignmentPriorityQueue) Push(x interface{}) {
    method Pop (line 1121) | func (pq *assignmentPriorityQueue) Pop() interface{} {

FILE: balance_strategy_test.go
  function TestBalanceStrategyRange (line 17) | func TestBalanceStrategyRange(t *testing.T) {
  function TestBalanceStrategyRangeAssignmentData (line 101) | func TestBalanceStrategyRangeAssignmentData(t *testing.T) {
  function TestBalanceStrategyRoundRobin (line 121) | func TestBalanceStrategyRoundRobin(t *testing.T) {
  function Test_deserializeTopicPartitionAssignment (line 203) | func Test_deserializeTopicPartitionAssignment(t *testing.T) {
  function TestBalanceStrategyRoundRobinAssignmentData (line 288) | func TestBalanceStrategyRoundRobinAssignmentData(t *testing.T) {
  function Test_prepopulateCurrentAssignments (line 308) | func Test_prepopulateCurrentAssignments(t *testing.T) {
  function Test_areSubscriptionsIdentical (line 460) | func Test_areSubscriptionsIdentical(t *testing.T) {
  function Test_sortMemberIDsByPartitionAssignments (line 584) | func Test_sortMemberIDsByPartitionAssignments(t *testing.T) {
  function Test_sortPartitions (line 640) | func Test_sortPartitions(t *testing.T) {
  function Test_filterAssignedPartitions (line 751) | func Test_filterAssignedPartitions(t *testing.T) {
  function Test_canConsumerParticipateInReassignment (line 823) | func Test_canConsumerParticipateInReassignment(t *testing.T) {
  function Test_removeTopicPartitionFromMemberAssignments (line 924) | func Test_removeTopicPartitionFromMemberAssignments(t *testing.T) {
  function Test_assignPartition (line 997) | func Test_assignPartition(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan (line 1121) | func Test_stickyBalanceStrategy_Plan(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_KIP54_ExampleOne (line 1350) | func Test_stickyBalanceStrategy_Plan_KIP54_ExampleOne(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_KIP54_ExampleTwo (line 1390) | func Test_stickyBalanceStrategy_Plan_KIP54_ExampleTwo(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_KIP54_ExampleThree (line 1434) | func Test_stickyBalanceStrategy_Plan_KIP54_ExampleThree(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_AddRemoveConsumerOneTopic (line 1471) | func Test_stickyBalanceStrategy_Plan_AddRemoveConsumerOneTopic(t *testin...
  function Test_stickyBalanceStrategy_Plan_PoorRoundRobinAssignmentScenario (line 1507) | func Test_stickyBalanceStrategy_Plan_PoorRoundRobinAssignmentScenario(t ...
  function Test_stickyBalanceStrategy_Plan_AddRemoveTopicTwoConsumers (line 1538) | func Test_stickyBalanceStrategy_Plan_AddRemoveTopicTwoConsumers(t *testi...
  function Test_stickyBalanceStrategy_Plan_ReassignmentAfterOneConsumerLeaves (line 1588) | func Test_stickyBalanceStrategy_Plan_ReassignmentAfterOneConsumerLeaves(...
  function Test_stickyBalanceStrategy_Plan_ReassignmentAfterOneConsumerAdded (line 1628) | func Test_stickyBalanceStrategy_Plan_ReassignmentAfterOneConsumerAdded(t...
  function Test_stickyBalanceStrategy_Plan_SameSubscriptions (line 1652) | func Test_stickyBalanceStrategy_Plan_SameSubscriptions(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_LargeAssignmentWithMultipleConsumersLeaving (line 1689) | func Test_stickyBalanceStrategy_Plan_LargeAssignmentWithMultipleConsumer...
  function Test_stickyBalanceStrategy_Plan_NewSubscription (line 1729) | func Test_stickyBalanceStrategy_Plan_NewSubscription(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_ReassignmentWithRandomSubscriptionsAndChanges (line 1758) | func Test_stickyBalanceStrategy_Plan_ReassignmentWithRandomSubscriptions...
  function Test_stickyBalanceStrategy_Plan_MoveExistingAssignments (line 1807) | func Test_stickyBalanceStrategy_Plan_MoveExistingAssignments(t *testing....
  function Test_stickyBalanceStrategy_Plan_Stickiness (line 1832) | func Test_stickyBalanceStrategy_Plan_Stickiness(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_AssignmentUpdatedForDeletedTopic (line 1860) | func Test_stickyBalanceStrategy_Plan_AssignmentUpdatedForDeletedTopic(t ...
  function Test_stickyBalanceStrategy_Plan_NoExceptionRaisedWhenOnlySubscribedTopicDeleted (line 1882) | func Test_stickyBalanceStrategy_Plan_NoExceptionRaisedWhenOnlySubscribed...
  function Test_stickyBalanceStrategy_Plan_AssignmentWithMultipleGenerations1 (line 1910) | func Test_stickyBalanceStrategy_Plan_AssignmentWithMultipleGenerations1(...
  function Test_stickyBalanceStrategy_Plan_AssignmentWithMultipleGenerations2 (line 1960) | func Test_stickyBalanceStrategy_Plan_AssignmentWithMultipleGenerations2(...
  function Test_stickyBalanceStrategy_Plan_AssignmentWithConflictingPreviousGenerations (line 2006) | func Test_stickyBalanceStrategy_Plan_AssignmentWithConflictingPreviousGe...
  function Test_stickyBalanceStrategy_Plan_SchemaBackwardCompatibility (line 2029) | func Test_stickyBalanceStrategy_Plan_SchemaBackwardCompatibility(t *test...
  function Test_stickyBalanceStrategy_Plan_ConflictingPreviousAssignments (line 2049) | func Test_stickyBalanceStrategy_Plan_ConflictingPreviousAssignments(t *t...
  function Test_stickyBalanceStrategy_Plan_AssignmentData (line 2068) | func Test_stickyBalanceStrategy_Plan_AssignmentData(t *testing.T) {
  function Test_stickyBalanceStrategy_Plan_data_race (line 2090) | func Test_stickyBalanceStrategy_Plan_data_race(t *testing.T) {
  function BenchmarkStickAssignmentWithLargeNumberOfConsumersAndTopics (line 2107) | func BenchmarkStickAssignmentWithLargeNumberOfConsumersAndTopics(b *test...
  function BenchmarkStickAssignmentWithLargeNumberOfConsumersAndTopicsAndExistingAssignments (line 2135) | func BenchmarkStickAssignmentWithLargeNumberOfConsumersAndTopicsAndExist...
  function verifyPlanIsBalancedAndSticky (line 2174) | func verifyPlanIsBalancedAndSticky(t *testing.T, s *stickyBalanceStrateg...
  function verifyValidityAndBalance (line 2187) | func verifyValidityAndBalance(t *testing.T, consumers map[string]Consume...
  function intersection (line 2264) | func intersection(a interface{}, b interface{}) []interface{} {
  function encodeSubscriberPlan (line 2285) | func encodeSubscriberPlan(t *testing.T, assignments map[string][]int32) ...
  function encodeSubscriberPlanWithGeneration (line 2289) | func encodeSubscriberPlanWithGeneration(t *testing.T, assignments map[st...
  function encodeSubscriberPlanWithGenerationForBenchmark (line 2301) | func encodeSubscriberPlanWithGenerationForBenchmark(b *testing.B, assign...
  function encodeSubscriberPlanWithOldSchema (line 2313) | func encodeSubscriberPlanWithOldSchema(t *testing.T, assignments map[str...
  function verifyFullyBalanced (line 2326) | func verifyFullyBalanced(t *testing.T, plan BalanceStrategyPlan) {
  function getRandomSublist (line 2346) | func getRandomSublist(r *rand.Rand, s []string) []string {
  function Test_sortPartitionsByPotentialConsumerAssignments (line 2365) | func Test_sortPartitionsByPotentialConsumerAssignments(t *testing.T) {

FILE: broker.go
  type Broker (line 23) | type Broker struct
    method Open (line 165) | func (b *Broker) Open(conf *Config) error {
    method ResponseSize (line 315) | func (b *Broker) ResponseSize() int {
    method Connected (line 324) | func (b *Broker) Connected() (bool, error) {
    method TLSConnectionState (line 332) | func (b *Broker) TLSConnectionState() (state tls.ConnectionState, ok b...
    method Close (line 350) | func (b *Broker) Close() error {
    method maybeCloseLocked (line 360) | func (b *Broker) maybeCloseLocked(err error) bool {
    method closeLocked (line 372) | func (b *Broker) closeLocked() error {
    method ID (line 403) | func (b *Broker) ID() int32 {
    method Addr (line 408) | func (b *Broker) Addr() string {
    method Rack (line 416) | func (b *Broker) Rack() string {
    method GetMetadata (line 424) | func (b *Broker) GetMetadata(request *MetadataRequest) (*MetadataRespo...
    method DescribeCluster (line 436) | func (b *Broker) DescribeCluster(request *DescribeClusterRequest) (*De...
    method GetConsumerMetadata (line 448) | func (b *Broker) GetConsumerMetadata(request *ConsumerMetadataRequest)...
    method FindCoordinator (line 460) | func (b *Broker) FindCoordinator(request *FindCoordinatorRequest) (*Fi...
    method GetAvailableOffsets (line 472) | func (b *Broker) GetAvailableOffsets(request *OffsetRequest) (*OffsetR...
    method AsyncProduce (line 499) | func (b *Broker) AsyncProduce(request *ProduceRequest, cb ProduceCallb...
    method Produce (line 539) | func (b *Broker) Produce(request *ProduceRequest) (*ProduceResponse, e...
    method Fetch (line 560) | func (b *Broker) Fetch(request *FetchRequest) (*FetchResponse, error) {
    method CommitOffset (line 581) | func (b *Broker) CommitOffset(request *OffsetCommitRequest) (*OffsetCo...
    method FetchOffset (line 593) | func (b *Broker) FetchOffset(request *OffsetFetchRequest) (*OffsetFetc...
    method JoinGroup (line 606) | func (b *Broker) JoinGroup(request *JoinGroupRequest) (*JoinGroupRespo...
    method SyncGroup (line 618) | func (b *Broker) SyncGroup(request *SyncGroupRequest) (*SyncGroupRespo...
    method LeaveGroup (line 630) | func (b *Broker) LeaveGroup(request *LeaveGroupRequest) (*LeaveGroupRe...
    method Heartbeat (line 642) | func (b *Broker) Heartbeat(request *HeartbeatRequest) (*HeartbeatRespo...
    method ListGroups (line 654) | func (b *Broker) ListGroups(request *ListGroupsRequest) (*ListGroupsRe...
    method DescribeGroups (line 667) | func (b *Broker) DescribeGroups(request *DescribeGroupsRequest) (*Desc...
    method ApiVersions (line 679) | func (b *Broker) ApiVersions(request *ApiVersionsRequest) (*ApiVersion...
    method CreateTopics (line 691) | func (b *Broker) CreateTopics(request *CreateTopicsRequest) (*CreateTo...
    method DeleteTopics (line 703) | func (b *Broker) DeleteTopics(request *DeleteTopicsRequest) (*DeleteTo...
    method CreatePartitions (line 716) | func (b *Broker) CreatePartitions(request *CreatePartitionsRequest) (*...
    method AlterPartitionReassignments (line 729) | func (b *Broker) AlterPartitionReassignments(request *AlterPartitionRe...
    method ListPartitionReassignments (line 742) | func (b *Broker) ListPartitionReassignments(request *ListPartitionReas...
    method ElectLeaders (line 754) | func (b *Broker) ElectLeaders(request *ElectLeadersRequest) (*ElectLea...
    method DeleteRecords (line 767) | func (b *Broker) DeleteRecords(request *DeleteRecordsRequest) (*Delete...
    method DescribeAcls (line 779) | func (b *Broker) DescribeAcls(request *DescribeAclsRequest) (*Describe...
    method CreateAcls (line 791) | func (b *Broker) CreateAcls(request *CreateAclsRequest) (*CreateAclsRe...
    method DeleteAcls (line 814) | func (b *Broker) DeleteAcls(request *DeleteAclsRequest) (*DeleteAclsRe...
    method InitProducerID (line 826) | func (b *Broker) InitProducerID(request *InitProducerIDRequest) (*Init...
    method AddPartitionsToTxn (line 840) | func (b *Broker) AddPartitionsToTxn(request *AddPartitionsToTxnRequest...
    method AddOffsetsToTxn (line 853) | func (b *Broker) AddOffsetsToTxn(request *AddOffsetsToTxnRequest) (*Ad...
    method EndTxn (line 865) | func (b *Broker) EndTxn(request *EndTxnRequest) (*EndTxnResponse, erro...
    method TxnOffsetCommit (line 878) | func (b *Broker) TxnOffsetCommit(request *TxnOffsetCommitRequest) (*Tx...
    method DescribeConfigs (line 891) | func (b *Broker) DescribeConfigs(request *DescribeConfigsRequest) (*De...
    method AlterConfigs (line 903) | func (b *Broker) AlterConfigs(request *AlterConfigsRequest) (*AlterCon...
    method IncrementalAlterConfigs (line 915) | func (b *Broker) IncrementalAlterConfigs(request *IncrementalAlterConf...
    method DeleteGroups (line 927) | func (b *Broker) DeleteGroups(request *DeleteGroupsRequest) (*DeleteGr...
    method DeleteOffsets (line 938) | func (b *Broker) DeleteOffsets(request *DeleteOffsetsRequest) (*Delete...
    method DescribeLogDirs (line 949) | func (b *Broker) DescribeLogDirs(request *DescribeLogDirsRequest) (*De...
    method DescribeUserScramCredentials (line 961) | func (b *Broker) DescribeUserScramCredentials(req *DescribeUserScramCr...
    method AlterUserScramCredentials (line 972) | func (b *Broker) AlterUserScramCredentials(req *AlterUserScramCredenti...
    method DescribeClientQuotas (line 984) | func (b *Broker) DescribeClientQuotas(request *DescribeClientQuotasReq...
    method AlterClientQuotas (line 996) | func (b *Broker) AlterClientQuotas(request *AlterClientQuotasRequest) ...
    method readFull (line 1009) | func (b *Broker) readFull(buf []byte) (n int, err error) {
    method write (line 1019) | func (b *Broker) write(buf []byte) (n int, err error) {
    method send (line 1039) | func (b *Broker) send(req, res protocolBody) (*responsePromise, error) {
    method sendWithPromise (line 1064) | func (b *Broker) sendWithPromise(rb protocolBody, promise *responsePro...
    method sendInternal (line 1083) | func (b *Broker) sendInternal(rb protocolBody, promise *responsePromis...
    method sendAndReceive (line 1132) | func (b *Broker) sendAndReceive(req protocolBody, res protocolBody) er...
    method decode (line 1166) | func (b *Broker) decode(pd packetDecoder, version int16) (err error) {
    method encode (line 1198) | func (b *Broker) encode(pe packetEncoder, version int16) (err error) {
    method responseReceiver (line 1229) | func (b *Broker) responseReceiver() {
    method sendAndReceiveApiVersions (line 1327) | func (b *Broker) sendAndReceiveApiVersions(v int16) (*ApiVersionsRespo...
    method authenticateViaSASLv0 (line 1392) | func (b *Broker) authenticateViaSASLv0() error {
    method authenticateViaSASLv1 (line 1403) | func (b *Broker) authenticateViaSASLv1() error {
    method sendAndReceiveKerberos (line 1470) | func (b *Broker) sendAndReceiveKerberos() error {
    method sendAndReceiveSASLHandshake (line 1478) | func (b *Broker) sendAndReceiveSASLHandshake(saslType SASLMechanism, v...
    method sendAndReceiveSASLPlainAuthV0 (line 1555) | func (b *Broker) sendAndReceiveSASLPlainAuthV0() error {
    method sendAndReceiveSASLPlainAuthV1 (line 1599) | func (b *Broker) sendAndReceiveSASLPlainAuthV1(authSendReceiver func(a...
    method sendAndReceiveSASLOAuth (line 1611) | func (b *Broker) sendAndReceiveSASLOAuth(authSendReceiver func(authByt...
    method sendAndReceiveSASLSCRAMv0 (line 1635) | func (b *Broker) sendAndReceiveSASLSCRAMv0() error {
    method sendAndReceiveSASLSCRAMv1 (line 1692) | func (b *Broker) sendAndReceiveSASLSCRAMv1(authSendReceiver func(authB...
    method createSaslAuthenticateRequest (line 1720) | func (b *Broker) createSaslAuthenticateRequest(msg []byte) *SaslAuthen...
    method computeSaslSessionLifetime (line 1764) | func (b *Broker) computeSaslSessionLifetime(res *SaslAuthenticateRespo...
    method updateIncomingCommunicationMetrics (line 1781) | func (b *Broker) updateIncomingCommunicationMetrics(bytes int, request...
    method updateRequestLatencyAndInFlightMetrics (line 1801) | func (b *Broker) updateRequestLatencyAndInFlightMetrics(requestLatency...
    method addRequestInFlightMetrics (line 1812) | func (b *Broker) addRequestInFlightMetrics(i int64) {
    method updateOutgoingCommunicationMetrics (line 1819) | func (b *Broker) updateOutgoingCommunicationMetrics(bytes int) {
    method updateProtocolMetrics (line 1837) | func (b *Broker) updateProtocolMetrics(rb protocolBody) {
    method handleThrottledResponse (line 1859) | func (b *Broker) handleThrottledResponse(resp protocolBody) {
    method setThrottle (line 1874) | func (b *Broker) setThrottle(throttleTime time.Duration) {
    method waitIfThrottled (line 1886) | func (b *Broker) waitIfThrottled() {
    method updateThrottleMetric (line 1896) | func (b *Broker) updateThrottleMetric(throttleTime time.Duration) {
    method registerMetrics (line 1903) | func (b *Broker) registerMetrics() {
    method registerMeter (line 1917) | func (b *Broker) registerMeter(name string) metrics.Meter {
    method registerHistogram (line 1922) | func (b *Broker) registerHistogram(name string) metrics.Histogram {
    method registerCounter (line 1927) | func (b *Broker) registerCounter(name string) metrics.Counter {
  type SASLMechanism (line 69) | type SASLMechanism
  constant SASLTypeOAuth (line 73) | SASLTypeOAuth = "OAUTHBEARER"
  constant SASLTypePlaintext (line 75) | SASLTypePlaintext = "PLAIN"
  constant SASLTypeSCRAMSHA256 (line 77) | SASLTypeSCRAMSHA256 = "SCRAM-SHA-256"
  constant SASLTypeSCRAMSHA512 (line 79) | SASLTypeSCRAMSHA512 = "SCRAM-SHA-512"
  constant SASLTypeGSSAPI (line 80) | SASLTypeGSSAPI      = "GSSAPI"
  constant SASLHandshakeV0 (line 83) | SASLHandshakeV0 = int16(0)
  constant SASLHandshakeV1 (line 86) | SASLHandshakeV1 = int16(1)
  constant SASLExtKeyAuth (line 89) | SASLExtKeyAuth = "auth"
  type AccessToken (line 94) | type AccessToken struct
  type AccessTokenProvider (line 106) | type AccessTokenProvider interface
  type SCRAMClient (line 119) | type SCRAMClient interface
  type responsePromise (line 131) | type responsePromise struct
    method handle (line 140) | func (p *responsePromise) handle(packets []byte, err error) {
  function NewBroker (line 156) | func NewBroker(addr string) *Broker {
  type ProduceCallback (line 485) | type ProduceCallback
  function makeResponsePromise (line 1054) | func makeResponsePromise(res protocolBody) *responsePromise {
  function handleResponsePromise (line 1157) | func handleResponsePromise(req protocolBody, res protocolBody, promise *...
  function getHeaderLength (line 1284) | func getHeaderLength(headerVersion int16) int8 {
  function shouldCloseBrokerConn (line 1294) | func shouldCloseBrokerConn(err error) bool {
  function currentUnixMilli (line 1605) | func currentUnixMilli() int64 {
  function buildClientFirstMessage (line 1731) | func buildClientFirstMessage(token *AccessToken) ([]byte, error) {
  function mapToString (line 1752) | func mapToString(extensions map[string]string, keyValSep string, elemSep...
  type throttleSupport (line 1855) | type throttleSupport interface
  function validServerNameTLS (line 1932) | func validServerNameTLS(addr string, cfg *tls.Config) *tls.Config {

FILE: broker_test.go
  function ExampleBroker (line 19) | func ExampleBroker() {
  type mockEncoder (line 40) | type mockEncoder struct
    method encode (line 44) | func (m mockEncoder) encode(pe packetEncoder) error {
    method headerVersion (line 48) | func (m mockEncoder) headerVersion() int16 {
  type brokerMetrics (line 52) | type brokerMetrics struct
  function TestBrokerAccessors (line 57) | func TestBrokerAccessors(t *testing.T) {
  type produceResponsePromise (line 84) | type produceResponsePromise struct
    method callback (line 99) | func (p produceResponsePromise) callback(res *ProduceResponse, err err...
    method Get (line 111) | func (p produceResponsePromise) Get() (*ProduceResponse, error) {
  type produceResOrError (line 88) | type produceResOrError struct
  function newProduceResponsePromise (line 93) | func newProduceResponsePromise() produceResponsePromise {
  function TestSimpleBrokerCommunication (line 116) | func TestSimpleBrokerCommunication(t *testing.T) {
  function TestBrokerFailedRequest (line 159) | func TestBrokerFailedRequest(t *testing.T) {
  type closeImmediatelyDialer (line 203) | type closeImmediatelyDialer struct
    method Dial (line 205) | func (closeImmediatelyDialer) Dial(_, _ string) (net.Conn, error) {
  function TestBrokerOpenApiVersionsTransportError (line 211) | func TestBrokerOpenApiVersionsTransportError(t *testing.T) {
  function TestBrokerOpenSASLv1FailThenReopenTransportError (line 252) | func TestBrokerOpenSASLv1FailThenReopenTransportError(t *testing.T) {
  type TokenProvider (line 293) | type TokenProvider struct
    method Token (line 298) | func (t *TokenProvider) Token() (*AccessToken, error) {
  function newTokenProvider (line 302) | func newTokenProvider(token *AccessToken, err error) *TokenProvider {
  function TestSASLOAuthBearer (line 309) | func TestSASLOAuthBearer(t *testing.T) {
  type MockSCRAMClient (line 429) | type MockSCRAMClient struct
    method Begin (line 433) | func (m *MockSCRAMClient) Begin(_, _, _ string) (err error) {
    method Step (line 437) | func (m *MockSCRAMClient) Step(challenge string) (response string, err...
    method Done (line 448) | func (m *MockSCRAMClient) Done() bool {
  function TestSASLSCRAMSHAXXX (line 454) | func TestSASLSCRAMSHAXXX(t *testing.T) {
  function TestSASLPlainAuth (line 559) | func TestSASLPlainAuth(t *testing.T) {
  function TestSASLReadTimeout (line 681) | func TestSASLReadTimeout(t *testing.T) {
  function TestGSSAPIKerberosAuth_Authorize (line 729) | func TestGSSAPIKerberosAuth_Authorize(t *testing.T) {
  function TestBuildClientFirstMessage (line 846) | func TestBuildClientFirstMessage(t *testing.T) {
  function TestKip368ReAuthenticationSuccess (line 899) | func TestKip368ReAuthenticationSuccess(t *testing.T) {
  function TestKip368ReAuthenticationFailure (line 983) | func TestKip368ReAuthenticationFailure(t *testing.T) {
  function validateBrokerMetrics (line 1463) | func validateBrokerMetrics(t *testing.T, broker *Broker, mockBrokerMetri...
  function BenchmarkBroker_Open (line 1494) | func BenchmarkBroker_Open(b *testing.B) {
  function BenchmarkBroker_No_Metrics_Open (line 1512) | func BenchmarkBroker_No_Metrics_Open(b *testing.B) {
  function Test_handleThrottledResponse (line 1529) | func Test_handleThrottledResponse(t *testing.T) {

FILE: client.go
  type Client (line 24) | type Client interface
  constant OffsetNewest (line 135) | OffsetNewest int64 = -1
  constant OffsetOldest (line 140) | OffsetOldest int64 = -2
  type client (line 143) | type client struct
    method Config (line 252) | func (client *client) Config() *Config {
    method Brokers (line 256) | func (client *client) Brokers() []*Broker {
    method Broker (line 266) | func (client *client) Broker(brokerID int32) (*Broker, error) {
    method InitProducerID (line 277) | func (client *client) InitProducerID() (*InitProducerIDResponse, error) {
    method Close (line 312) | func (client *client) Close() error {
    method Closed (line 343) | func (client *client) Closed() bool {
    method Topics (line 350) | func (client *client) Topics() ([]string, error) {
    method MetadataTopics (line 366) | func (client *client) MetadataTopics() ([]string, error) {
    method Partitions (line 382) | func (client *client) Partitions(topic string) ([]int32, error) {
    method WritablePartitions (line 386) | func (client *client) WritablePartitions(topic string) ([]int32, error) {
    method getPartitions (line 390) | func (client *client) getPartitions(topic string, pt partitionType) ([...
    method Replicas (line 418) | func (client *client) Replicas(topic string, partitionID int32) ([]int...
    method InSyncReplicas (line 424) | func (client *client) InSyncReplicas(topic string, partitionID int32) ...
    method OfflineReplicas (line 430) | func (client *client) OfflineReplicas(topic string, partitionID int32)...
    method getReplicas (line 436) | func (client *client) getReplicas(topic string, partitionID int32, ext...
    method Leader (line 462) | func (client *client) Leader(topic string, partitionID int32) (*Broker...
    method LeaderAndEpoch (line 467) | func (client *client) LeaderAndEpoch(topic string, partitionID int32) ...
    method RefreshBrokers (line 484) | func (client *client) RefreshBrokers(addrs []string) error {
    method RefreshMetadata (line 513) | func (client *client) RefreshMetadata(topics ...string) error {
    method GetOffset (line 527) | func (client *client) GetOffset(topic string, partitionID int32, times...
    method Controller (line 543) | func (client *client) Controller() (*Broker, error) {
    method deregisterController (line 569) | func (client *client) deregisterController() {
    method RefreshController (line 580) | func (client *client) RefreshController() (*Broker, error) {
    method Coordinator (line 600) | func (client *client) Coordinator(consumerGroup string) (*Broker, erro...
    method RefreshCoordinator (line 622) | func (client *client) RefreshCoordinator(consumerGroup string) error {
    method TransactionCoordinator (line 639) | func (client *client) TransactionCoordinator(transactionID string) (*B...
    method RefreshTransactionCoordinator (line 661) | func (client *client) RefreshTransactionCoordinator(transactionID stri...
    method randomizeSeedBrokers (line 680) | func (client *client) randomizeSeedBrokers(addrs []string) {
    method updateBroker (line 687) | func (client *client) updateBroker(brokers []*Broker) {
    method registerBroker (line 721) | func (client *client) registerBroker(broker *Broker) {
    method deregisterBroker (line 739) | func (client *client) deregisterBroker(broker *Broker) {
    method resurrectDeadBrokers (line 755) | func (client *client) resurrectDeadBrokers() {
    method LeastLoadedBroker (line 766) | func (client *client) LeastLoadedBroker() *Broker {
    method cachedMetadata (line 804) | func (client *client) cachedMetadata(topic string, partitionID int32) ...
    method cachedPartitions (line 816) | func (client *client) cachedPartitions(topic string, partitionSet part...
    method setPartitionCache (line 828) | func (client *client) setPartitionCache(topic string, partitionSet par...
    method cachedLeader (line 847) | func (client *client) cachedLeader(topic string, partitionID int32) (*...
    method getOffset (line 870) | func (client *client) getOffset(topic string, partitionID int32, times...
    method backgroundMetadataUpdater (line 902) | func (client *client) backgroundMetadataUpdater() {
    method refreshMetadata (line 924) | func (client *client) refreshMetadata() error {
    method tryRefreshMetadata (line 944) | func (client *client) tryRefreshMetadata(topics []string, attemptsRema...
    method updateMetadata (line 1048) | func (client *client) updateMetadata(data *MetadataResponse, allKnownM...
    method cachedCoordinator (line 1115) | func (client *client) cachedCoordinator(consumerGroup string) *Broker {
    method cachedTransactionCoordinator (line 1124) | func (client *client) cachedTransactionCoordinator(transactionID strin...
    method cachedController (line 1133) | func (client *client) cachedController() *Broker {
    method computeBackoff (line 1140) | func (client *client) computeBackoff(attemptsRemaining int) time.Durat...
    method findCoordinator (line 1149) | func (client *client) findCoordinator(coordinatorKey string, coordinat...
    method resolveCanonicalNames (line 1227) | func (client *client) resolveCanonicalNames(addrs []string) ([]string,...
    method PartitionNotReadable (line 1289) | func (client *client) PartitionNotReadable(topic string, partition int...
  function NewClient (line 177) | func NewClient(addrs []string, conf *Config) (Client, error) {
  type partitionType (line 793) | type partitionType
  constant allPartitions (line 796) | allPartitions partitionType = iota
  constant writablePartitions (line 797) | writablePartitions
  constant maxPartitionIndex (line 801) | maxPartitionIndex
  type nopCloserClient (line 1279) | type nopCloserClient struct
    method Close (line 1285) | func (ncc *nopCloserClient) Close() error {

FILE: client_test.go
  function TestSimpleClient (line 20) | func TestSimpleClient(t *testing.T) {
  function TestCachedPartitions (line 36) | func TestCachedPartitions(t *testing.T) {
  function TestClientDoesntCachePartitionsForTopicsWithErrors (line 75) | func TestClientDoesntCachePartitionsForTopicsWithErrors(t *testing.T) {
  function TestClientSeedBrokers (line 131) | func TestClientSeedBrokers(t *testing.T) {
  function TestClientMetadata (line 147) | func TestClientMetadata(t *testing.T) {
  function TestClientMetadataWithOfflineReplicas (line 222) | func TestClientMetadataWithOfflineReplicas(t *testing.T) {
  function TestClientGetOffset (line 310) | func TestClientGetOffset(t *testing.T) {
  function TestClientReceivingUnknownTopicWithBackoffFunc (line 358) | func TestClientReceivingUnknownTopicWithBackoffFunc(t *testing.T) {
  function TestClientReceivingUnknownTopic (line 397) | func TestClientReceivingUnknownTopic(t *testing.T) {
  function TestClientReceivingPartialMetadata (line 435) | func TestClientReceivingPartialMetadata(t *testing.T) {
  function TestClientRefreshBehaviourWhenEmptyMetadataResponse (line 489) | func TestClientRefreshBehaviourWhenEmptyMetadataResponse(t *testing.T) {
  function TestClientRefreshBehaviour (line 536) | func TestClientRefreshBehaviour(t *testing.T) {
  function TestClientRefreshBrokers (line 573) | func TestClientRefreshBrokers(t *testing.T) {
  function TestClientRefreshMetadataBrokerOffline (line 606) | func TestClientRefreshMetadataBrokerOffline(t *testing.T) {
  function TestClientGetBroker (line 643) | func TestClientGetBroker(t *testing.T) {
  function TestClientResurrectDeadSeeds (line 686) | func TestClientResurrectDeadSeeds(t *testing.T) {
  function TestClientController (line 750) | func TestClientController(t *testing.T) {
  function TestClientMetadataTimeout (line 796) | func TestClientMetadataTimeout(t *testing.T) {
  function TestClientUpdateMetadataErrorAndRetry (line 884) | func TestClientUpdateMetadataErrorAndRetry(t *testing.T) {
  function TestClientRefreshesMetadataConcurrently (line 941) | func TestClientRefreshesMetadataConcurrently(t *testing.T) {
  function TestClientCoordinatorWithConsumerOffsetsTopic (line 1004) | func TestClientCoordinatorWithConsumerOffsetsTopic(t *testing.T) {
  function TestClientCoordinatorChangeWithConsumerOffsetsTopic (line 1058) | func TestClientCoordinatorChangeWithConsumerOffsetsTopic(t *testing.T) {
  function TestClientCoordinatorWithoutConsumerOffsetsTopic (line 1134) | func TestClientCoordinatorWithoutConsumerOffsetsTopic(t *testing.T) {
  function TestClientAutorefreshShutdownRace (line 1190) | func TestClientAutorefreshShutdownRace(t *testing.T) {
  function TestClientConnectionRefused (line 1234) | func TestClientConnectionRefused(t *testing.T) {
  function TestClientCoordinatorConnectionRefused (line 1249) | func TestClientCoordinatorConnectionRefused(t *testing.T) {
  function TestInitProducerIDConnectionRefused (line 1276) | func TestInitProducerIDConnectionRefused(t *testing.T) {
  function TestMetricsCleanup (line 1310) | func TestMetricsCleanup(t *testing.T) {
  function TestUpdateBroker (line 1335) | func TestUpdateBroker(t *testing.T) {

FILE: client_tls_test.go
  function TestTLS (line 17) | func TestTLS(t *testing.T) {
  function doListenerTLSTest (line 185) | func doListenerTLSTest(t *testing.T, expectSuccess bool, serverConfig, c...
  function TestSetServerName (line 225) | func TestSetServerName(t *testing.T) {

FILE: compress.go
  function compress (line 112) | func compress(cc CompressionCodec, level int, data []byte) ([]byte, erro...
  function gzipCompress (line 129) | func gzipCompress(level int, data []byte) ([]byte, error) {
  function lz4Compress (line 178) | func lz4Compress(data []byte) ([]byte, error) {

FILE: config.go
  constant defaultClientID (line 16) | defaultClientID = "sarama"
  type Config (line 23) | type Config struct
    method Validate (line 596) | func (c *Config) Validate() error {
    method getDialer (line 888) | func (c *Config) getDialer() proxy.Dialer {
  function NewConfig (line 530) | func NewConfig() *Config {
  constant MAX_GROUP_INSTANCE_ID_LENGTH (line 901) | MAX_GROUP_INSTANCE_ID_LENGTH = 249
  function validateGroupInstanceId (line 905) | func validateGroupInstanceId(id string) error {

FILE: config_resource_type.go
  type ConfigResourceType (line 4) | type ConfigResourceType
  constant UnknownResource (line 11) | UnknownResource ConfigResourceType = 0
  constant TopicResource (line 13) | TopicResource ConfigResourceType = 2
  constant BrokerResource (line 15) | BrokerResource ConfigResourceType = 4
  constant BrokerLoggerResource (line 17) | BrokerLoggerResource ConfigResourceType = 8

FILE: config_test.go
  function NewTestConfig (line 19) | func NewTestConfig() *Config {
  function TestDefaultConfigValidates (line 28) | func TestDefaultConfigValidates(t *testing.T) {
  function TestInvalidClientIDValidated (line 40) | func TestInvalidClientIDValidated(t *testing.T) {
  type DummyTokenProvider (line 58) | type DummyTokenProvider struct
    method Token (line 60) | func (t *DummyTokenProvider) Token() (*AccessToken, error) {
  function TestNetConfigValidates (line 64) | func TestNetConfigValidates(t *testing.T) {
  function TestMetadataConfigValidates (line 273) | func TestMetadataConfigValidates(t *testing.T) {
  function TestAdminConfigValidates (line 313) | func TestAdminConfigValidates(t *testing.T) {
  function TestProducerConfigValidates (line 339) | func TestProducerConfigValidates(t *testing.T) {
  function TestConsumerConfigValidates (line 470) | func TestConsumerConfigValidates(t *testing.T) {
  function TestLZ4ConfigValidation (line 505) | func TestLZ4ConfigValidation(t *testing.T) {
  function TestZstdConfigValidation (line 519) | func TestZstdConfigValidation(t *testing.T) {
  function TestValidGroupInstanceId (line 533) | func TestValidGroupInstanceId(t *testing.T) {
  function TestGroupInstanceIdAndVersionValidation (line 565) | func TestGroupInstanceIdAndVersionValidation(t *testing.T) {
  function TestConsumerGroupStrategyCompatibility (line 577) | func TestConsumerGroupStrategyCompatibility(t *testing.T) {
  function ExampleConfig_metrics (line 587) | func ExampleConfig_metrics() {

FILE: consumer.go
  type ConsumerMessage (line 15) | type ConsumerMessage struct
  type ConsumerError (line 28) | type ConsumerError struct
    method Error (line 34) | func (ce ConsumerError) Error() string {
    method Unwrap (line 38) | func (ce ConsumerError) Unwrap() error {
  type ConsumerErrors (line 45) | type ConsumerErrors
    method Error (line 47) | func (ce ConsumerErrors) Error() string {
  type Consumer (line 54) | type Consumer interface
  constant partitionConsumersBatchTimeout (line 100) | partitionConsumersBatchTimeout = 100 * time.Millisecond
  type consumer (line 102) | type consumer struct
    method Close (line 146) | func (c *consumer) Close() error {
    method Topics (line 151) | func (c *consumer) Topics() ([]string, error) {
    method Partitions (line 155) | func (c *consumer) Partitions(topic string) ([]int32, error) {
    method ConsumePartition (line 159) | func (c *consumer) ConsumePartition(topic string, partition int32, off...
    method HighWaterMarks (line 198) | func (c *consumer) HighWaterMarks() map[string]map[int32]int64 {
    method addChild (line 214) | func (c *consumer) addChild(child *partitionConsumer) error {
    method removeChild (line 232) | func (c *consumer) removeChild(child *partitionConsumer) {
    method refBrokerConsumer (line 239) | func (c *consumer) refBrokerConsumer(broker *Broker) *brokerConsumer {
    method unrefBrokerConsumer (line 254) | func (c *consumer) unrefBrokerConsumer(brokerWorker *brokerConsumer) {
    method abandonBrokerConsumer (line 268) | func (c *consumer) abandonBrokerConsumer(brokerWorker *brokerConsumer) {
    method Pause (line 276) | func (c *consumer) Pause(topicPartitions map[string][]int32) {
    method Resume (line 292) | func (c *consumer) Resume(topicPartitions map[string][]int32) {
    method PauseAll (line 308) | func (c *consumer) PauseAll() {
    method ResumeAll (line 320) | func (c *consumer) ResumeAll() {
    method newBrokerConsumer (line 863) | func (c *consumer) newBrokerConsumer(broker *Broker) *brokerConsumer {
  function NewConsumer (line 112) | func NewConsumer(addrs []string, config *Config) (Consumer, error) {
  function NewConsumerFromClient (line 122) | func NewConsumerFromClient(client Client) (Consumer, error) {
  function newConsumer (line 129) | func newConsumer(client Client) (Consumer, error) {
  type PartitionConsumer (line 350) | type PartitionConsumer interface
  type partitionConsumer (line 394) | type partitionConsumer struct
    method sendError (line 421) | func (child *partitionConsumer) sendError(err error) {
    method computeBackoff (line 435) | func (child *partitionConsumer) computeBackoff() time.Duration {
    method dispatcher (line 443) | func (child *partitionConsumer) dispatcher() {
    method preferredBroker (line 468) | func (child *partitionConsumer) preferredBroker() (*Broker, int32, err...
    method dispatch (line 488) | func (child *partitionConsumer) dispatch() error {
    method chooseStartingOffset (line 505) | func (child *partitionConsumer) chooseStartingOffset(offset int64) err...
    method Messages (line 532) | func (child *partitionConsumer) Messages() <-chan *ConsumerMessage {
    method Errors (line 536) | func (child *partitionConsumer) Errors() <-chan *ConsumerError {
    method AsyncClose (line 540) | func (child *partitionConsumer) AsyncClose() {
    method Close (line 550) | func (child *partitionConsumer) Close() error {
    method HighWaterMarkOffset (line 564) | func (child *partitionConsumer) HighWaterMarkOffset() int64 {
    method responseFeeder (line 568) | func (child *partitionConsumer) responseFeeder() {
    method parseMessages (line 622) | func (child *partitionConsumer) parseMessages(msgSet *MessageSet) ([]*...
    method parseRecords (line 656) | func (child *partitionConsumer) parseRecords(batch *RecordBatch) ([]*C...
    method parseResponse (line 685) | func (child *partitionConsumer) parseResponse(response *FetchResponse)...
    method interceptors (line 832) | func (child *partitionConsumer) interceptors(msg *ConsumerMessage) {
    method Pause (line 839) | func (child *partitionConsumer) Pause() {
    method Resume (line 844) | func (child *partitionConsumer) Resume() {
    method IsPaused (line 849) | func (child *partitionConsumer) IsPaused() bool {
  type brokerConsumer (line 853) | type brokerConsumer struct
    method subscriptionManager (line 883) | func (bc *brokerConsumer) subscriptionManager() {
    method subscriptionConsumer (line 924) | func (bc *brokerConsumer) subscriptionConsumer() {
    method updateSubscriptions (line 968) | func (bc *brokerConsumer) updateSubscriptions(newSubscriptions []*part...
    method handleResponses (line 987) | func (bc *brokerConsumer) handleResponses() {
    method abort (line 1042) | func (bc *brokerConsumer) abort(err error) {
    method fetchNewMessages (line 1066) | func (bc *brokerConsumer) fetchNewMessages() (*FetchResponse, error) {

FILE: consumer_group.go
  type ConsumerGroup (line 19) | type ConsumerGroup interface
  type consumerGroup (line 79) | type consumerGroup struct
    method Errors (line 154) | func (c *consumerGroup) Errors() <-chan error { return c.errors }
    method Close (line 157) | func (c *consumerGroup) Close() (err error) {
    method Consume (line 187) | func (c *consumerGroup) Consume(ctx context.Context, topics []string, ...
    method Pause (line 227) | func (c *consumerGroup) Pause(partitions map[string][]int32) {
    method Resume (line 232) | func (c *consumerGroup) Resume(partitions map[string][]int32) {
    method PauseAll (line 237) | func (c *consumerGroup) PauseAll() {
    method ResumeAll (line 242) | func (c *consumerGroup) ResumeAll() {
    method retryNewSession (line 246) | func (c *consumerGroup) retryNewSession(ctx context.Context, topics []...
    method newSession (line 268) | func (c *consumerGroup) newSession(ctx context.Context, topics []strin...
    method joinGroupRequest (line 445) | func (c *consumerGroup) joinGroupRequest(coordinator *Broker, topics [...
    method findStrategy (line 502) | func (c *consumerGroup) findStrategy(name string, groupStrategies []Ba...
    method syncGroupRequest (line 511) | func (c *consumerGroup) syncGroupRequest(
    method heartbeatRequest (line 562) | func (c *consumerGroup) heartbeatRequest(coordinator *Broker, memberID...
    method balance (line 589) | func (c *consumerGroup) balance(strategy BalanceStrategy, members map[...
    method leave (line 622) | func (c *consumerGroup) leave() error {
    method handleError (line 673) | func (c *consumerGroup) handleError(err error, topic string, partition...
    method loopCheckPartitionNumbers (line 704) | func (c *consumerGroup) loopCheckPartitionNumbers(allSubscribedTopicPa...
    method topicToPartitionNumbers (line 745) | func (c *consumerGroup) topicToPartitionNumbers(topics []string) (map[...
  function NewConsumerGroup (line 100) | func NewConsumerGroup(addrs []string, groupID string, config *Config) (C...
  function NewConsumerGroupFromClient (line 116) | func NewConsumerGroupFromClient(groupID string, client Client) (Consumer...
  function newConsumerGroup (line 126) | func newConsumerGroup(groupID string, client Client) (ConsumerGroup, err...
  type ConsumerGroupSession (line 763) | type ConsumerGroupSession interface
  type consumerGroupSession (line 807) | type consumerGroupSession struct
    method Claims (line 908) | func (s *consumerGroupSession) Claims() map[string][]int32 { return s....
    method MemberID (line 909) | func (s *consumerGroupSession) MemberID() string           { return s....
    method GenerationID (line 910) | func (s *consumerGroupSession) GenerationID() int32        { return s....
    method MarkOffset (line 912) | func (s *consumerGroupSession) MarkOffset(topic string, partition int3...
    method Commit (line 918) | func (s *consumerGroupSession) Commit() {
    method ResetOffset (line 922) | func (s *consumerGroupSession) ResetOffset(topic string, partition int...
    method MarkMessage (line 928) | func (s *consumerGroupSession) MarkMessage(msg *ConsumerMessage, metad...
    method Context (line 932) | func (s *consumerGroupSession) Context() context.Context {
    method consume (line 936) | func (s *consumerGroupSession) consume(topic string, partition int32) {
    method release (line 987) | func (s *consumerGroupSession) release(withCleanup bool) (err error) {
    method heartbeatLoop (line 1018) | func (s *consumerGroupSession) heartbeatLoop() {
  function newConsumerGroupSession (line 823) | func newConsumerGroupSession(ctx context.Context, parent *consumerGroup,...
  type ConsumerGroupHandler (line 1099) | type ConsumerGroupHandler interface
  type ConsumerGroupClaim (line 1114) | type ConsumerGroupClaim interface
  type consumerGroupClaim (line 1137) | type consumerGroupClaim struct
    method Topic (line 1169) | func (c *consumerGroupClaim) Topic() string        { return c.topic }
    method Partition (line 1170) | func (c *consumerGroupClaim) Partition() int32     { return c.partition }
    method InitialOffset (line 1171) | func (c *consumerGroupClaim) InitialOffset() int64 { return c.offset }
    method waitClosed (line 1174) | func (c *consumerGroupClaim) waitClosed() (errs ConsumerErrors) {
  function newConsumerGroupClaim (line 1144) | func newConsumerGroupClaim(sess *consumerGroupSession, topic string, par...

FILE: consumer_group_example_test.go
  type exampleConsumerGroupHandler (line 10) | type exampleConsumerGroupHandler struct
    method Setup (line 12) | func (exampleConsumerGroupHandler) Setup(_ ConsumerGroupSession) error...
    method Cleanup (line 13) | func (exampleConsumerGroupHandler) Cleanup(_ ConsumerGroupSession) err...
    method ConsumeClaim (line 14) | func (h exampleConsumerGroupHandler) ConsumeClaim(sess ConsumerGroupSe...
  function ExampleConsumerGroup (line 22) | func ExampleConsumerGroup() {

FILE: consumer_group_members.go
  type ConsumerGroupMemberMetadata (line 7) | type ConsumerGroupMemberMetadata struct
    method encode (line 16) | func (m *ConsumerGroupMemberMetadata) encode(pe packetEncoder) error {
    method decode (line 51) | func (m *ConsumerGroupMemberMetadata) decode(pd packetDecoder) (err er...
  type OwnedPartition (line 100) | type OwnedPartition struct
    method encode (line 105) | func (m *OwnedPartition) encode(pe packetEncoder) error {
    method decode (line 115) | func (m *OwnedPartition) decode(pd packetDecoder) (err error) {
  type ConsumerGroupMemberAssignment (line 128) | type ConsumerGroupMemberAssignment struct
    method encode (line 134) | func (m *ConsumerGroupMemberAssignment) encode(pe packetEncoder) error {
    method decode (line 157) | func (m *ConsumerGroupMemberAssignment) decode(pd packetDecoder) (err ...

FILE: consumer_group_members_test.go
  function TestConsumerGroupMemberMetadata (line 59) | func TestConsumerGroupMemberMetadata(t *testing.T) {
  function TestConsumerGroupMemberMetadataV1Decode (line 82) | func TestConsumerGroupMemberMetadataV1Decode(t *testing.T) {
  function TestConsumerGroupMemberMetadataV3Decode (line 92) | func TestConsumerGroupMemberMetadataV3Decode(t *testing.T) {
  function TestConsumerGroupMemberAssignment (line 99) | func TestConsumerGroupMemberAssignment(t *testing.T) {

FILE: consumer_group_test.go
  type handler (line 15) | type handler struct
    method Setup (line 19) | func (h *handler) Setup(s ConsumerGroupSession) error   { return nil }
    method Cleanup (line 20) | func (h *handler) Cleanup(s ConsumerGroupSession) error { return nil }
    method ConsumeClaim (line 21) | func (h *handler) ConsumeClaim(sess ConsumerGroupSession, claim Consum...
  function TestNewConsumerGroupFromClient (line 34) | func TestNewConsumerGroupFromClient(t *testing.T) {
  function TestConsumerGroupNewSessionDuringOffsetLoad (line 46) | func TestConsumerGroupNewSessionDuringOffsetLoad(t *testing.T) {
  function TestConsume_RaceTest (line 119) | func TestConsume_RaceTest(t *testing.T) {
  function TestConsumerGroupSessionDoesNotRetryForever (line 203) | func TestConsumerGroupSessionDoesNotRetryForever(t *testing.T) {
  function TestConsumerShouldNotRetrySessionIfContextCancelled (line 244) | func TestConsumerShouldNotRetrySessionIfContextCancelled(t *testing.T) {

FILE: consumer_metadata_request.go
  type ConsumerMetadataRequest (line 4) | type ConsumerMetadataRequest struct
    method setVersion (line 9) | func (r *ConsumerMetadataRequest) setVersion(v int16) {
    method encode (line 13) | func (r *ConsumerMetadataRequest) encode(pe packetEncoder) error {
    method decode (line 21) | func (r *ConsumerMetadataRequest) decode(pd packetDecoder, version int...
    method key (line 30) | func (r *ConsumerMetadataRequest) key() int16 {
    method version (line 34) | func (r *ConsumerMetadataRequest) version() int16 {
    method headerVersion (line 38) | func (r *ConsumerMetadataRequest) headerVersion() int16 {
    method isValidVersion (line 42) | func (r *ConsumerMetadataRequest) isValidVersion() bool {
    method requiredVersion (line 46) | func (r *ConsumerMetadataRequest) requiredVersion() KafkaVersion {

FILE: consumer_metadata_request_test.go
  function TestConsumerMetadataRequest (line 19) | func TestConsumerMetadataRequest(t *testing.T) {

FILE: consumer_metadata_response.go
  type ConsumerMetadataResponse (line 9) | type ConsumerMetadataResponse struct
    method setVersion (line 18) | func (r *ConsumerMetadataResponse) setVersion(v int16) {
    method decode (line 22) | func (r *ConsumerMetadataResponse) decode(pd packetDecoder, version in...
    method encode (line 53) | func (r *ConsumerMetadataResponse) encode(pe packetEncoder) error {
    method key (line 73) | func (r *ConsumerMetadataResponse) key() int16 {
    method version (line 77) | func (r *ConsumerMetadataResponse) version() int16 {
    method headerVersion (line 81) | func (r *ConsumerMetadataResponse) headerVersion() int16 {
    method isValidVersion (line 85) | func (r *ConsumerMetadataResponse) isValidVersion() bool {
    method requiredVersion (line 89) | func (r *ConsumerMetadataResponse) requiredVersion() KafkaVersion {

FILE: consumer_metadata_response_test.go
  function TestConsumerMetadataResponseError (line 26) | func TestConsumerMetadataResponseError(t *testing.T) {
  function TestConsumerMetadataResponseSuccess (line 40) | func TestConsumerMetadataResponseSuccess(t *testing.T) {

FILE: consumer_test.go
  function TestConsumerOffsetManual (line 25) | func TestConsumerOffsetManual(t *testing.T) {
  function TestConsumerMessageWithKey (line 88) | func TestConsumerMessageWithKey(t *testing.T) {
  function TestPauseResumeConsumption (line 152) | func TestPauseResumeConsumption(t *testing.T) {
  function TestConsumerOffsetNewest (line 236) | func TestConsumerOffsetNewest(t *testing.T) {
  function TestConsumerOffsetOldest (line 282) | func TestConsumerOffsetOldest(t *testing.T) {
  function TestConsumerRecreate (line 329) | func TestConsumerRecreate(t *testing.T) {
  function TestConsumerDuplicate (line 370) | func TestConsumerDuplicate(t *testing.T) {
  function runConsumerLeaderRefreshErrorTestWithConfig (line 410) | func runConsumerLeaderRefreshErrorTestWithConfig(t *testing.T, config *C...
  function TestConsumerLeaderRefreshError (line 483) | func TestConsumerLeaderRefreshError(t *testing.T) {
  function TestConsumerLeaderRefreshErrorWithBackoffFunc (line 493) | func TestConsumerLeaderRefreshErrorWithBackoffFunc(t *testing.T) {
  function TestConsumerInvalidTopic (line 513) | func TestConsumerInvalidTopic(t *testing.T) {
  function TestConsumerClosePartitionWithoutLeader (line 540) | func TestConsumerClosePartitionWithoutLeader(t *testing.T) {
  function TestConsumerShutsDownOutOfRange (line 594) | func TestConsumerShutsDownOutOfRange(t *testing.T) {
  function TestConsumerExtraOffsets (line 632) | func TestConsumerExtraOffsets(t *testing.T) {
  function TestConsumerReceivingFetchResponseWithTooOldRecords (line 703) | func TestConsumerReceivingFetchResponseWithTooOldRecords(t *testing.T) {
  function TestConsumeMessageWithNewerFetchAPIVersion (line 750) | func TestConsumeMessageWithNewerFetchAPIVersion(t *testing.T) {
  function TestConsumeMessageWithSessionIDs (line 792) | func TestConsumeMessageWithSessionIDs(t *testing.T) {
  function TestConsumeMessagesFromReadReplica (line 840) | func TestConsumeMessagesFromReadReplica(t *testing.T) {
  function TestConsumeMessagesFromReadReplicaLeaderFallback (line 916) | func TestConsumeMessagesFromReadReplicaLeaderFallback(t *testing.T) {
  function TestConsumeMessagesFromReadReplicaErrorReplicaNotAvailable (line 967) | func TestConsumeMessagesFromReadReplicaErrorReplicaNotAvailable(t *testi...
  function TestConsumeMessagesFromReadReplicaErrorUnknown (line 1037) | func TestConsumeMessagesFromReadReplicaErrorUnknown(t *testing.T) {
  function TestConsumeMessagesTrackLeader (line 1113) | func TestConsumeMessagesTrackLeader(t *testing.T) {
  function TestConsumerNonSequentialOffsets (line 1226) | func TestConsumerNonSequentialOffsets(t *testing.T) {
  function TestConsumerRebalancingMultiplePartitions (line 1282) | func TestConsumerRebalancingMultiplePartitions(t *testing.T) {
  function TestConsumerInterleavedClose (line 1485) | func TestConsumerInterleavedClose(t *testing.T) {
  function TestConsumerBounceWithReferenceOpen (line 1533) | func TestConsumerBounceWithReferenceOpen(t *testing.T) {
  function TestConsumerOffsetOutOfRange (line 1632) | func TestConsumerOffsetOutOfRange(t *testing.T) {
  function TestConsumerExpiryTicker (line 1664) | func TestConsumerExpiryTicker(t *testing.T) {
  function TestConsumerTimestamps (line 1706) | func TestConsumerTimestamps(t *testing.T) {
  function TestExcludeUncommitted (line 1819) | func TestExcludeUncommitted(t *testing.T) {
  function assertMessageKey (line 1880) | func assertMessageKey(t *testing.T, msg *ConsumerMessage, expectedKey En...
  function assertMessageValue (line 1889) | func assertMessageValue(t *testing.T, msg *ConsumerMessage, expectedValu...
  function assertMessageOffset (line 1898) | func assertMessageOffset(t *testing.T, msg *ConsumerMessage, expectedOff...
  function ExampleConsumer (line 1907) | func ExampleConsumer() {
  function Test_partitionConsumer_parseResponse (line 1949) | func Test_partitionConsumer_parseResponse(t *testing.T) {
  function Test_partitionConsumer_parseResponseEmptyBatch (line 1995) | func Test_partitionConsumer_parseResponseEmptyBatch(t *testing.T) {
  function testConsumerInterceptor (line 2028) | func testConsumerInterceptor(
  function TestConsumerInterceptors (line 2077) | func TestConsumerInterceptors(t *testing.T) {
  function TestConsumerError (line 2139) | func TestConsumerError(t *testing.T) {

FILE: control_record.go
  type ControlRecordType (line 4) | type ControlRecordType
  constant ControlRecordAbort (line 8) | ControlRecordAbort ControlRecordType = iota
  constant ControlRecordCommit (line 10) | ControlRecordCommit
  constant ControlRecordUnknown (line 12) | ControlRecordUnknown
  type ControlRecord (line 18) | type ControlRecord struct
    method decode (line 24) | func (cr *ControlRecord) decode(key, value packetDecoder) error {
    method encode (line 63) | func (cr *ControlRecord) encode(key, value packetEncoder) {

FILE: control_record_test.go
  function testDecode (line 34) | func testDecode(t *testing.T, tp string, key []byte, value []byte) Contr...
  function assertRecordType (line 44) | func assertRecordType(t *testing.T, r *ControlRecord, expected ControlRe...
  function TestDecodingControlRecords (line 50) | func TestDecodingControlRecords(t *testing.T) {

FILE: crc32_field.go
  type crcPolynomial (line 10) | type crcPolynomial
  constant crcIEEE (line 13) | crcIEEE crcPolynomial = iota
  constant crcCastagnoli (line 14) | crcCastagnoli
  function acquireCrc32Field (line 19) | func acquireCrc32Field(polynomial crcPolynomial) *crc32Field {
  function releaseCrc32Field (line 29) | func releaseCrc32Field(c *crc32Field) {
  type crc32Field (line 36) | type crc32Field struct
    method saveOffset (line 41) | func (c *crc32Field) saveOffset(in int) {
    method reserveLength (line 45) | func (c *crc32Field) reserveLength() int {
    method run (line 53) | func (c *crc32Field) run(curOffset int, buf []byte) error {
    method check (line 62) | func (c *crc32Field) check(curOffset int, buf []byte) error {
    method crc (line 76) | func (c *crc32Field) crc(curOffset int, buf []byte) (uint32, error) {
  function newCRC32Field (line 49) | func newCRC32Field(polynomial crcPolynomial) *crc32Field {

FILE: create_partitions_request.go
  type CreatePartitionsRequest (line 5) | type CreatePartitionsRequest struct
    method setVersion (line 12) | func (c *CreatePartitionsRequest) setVersion(v int16) {
    method encode (line 16) | func (c *CreatePartitionsRequest) encode(pe packetEncoder) error {
    method decode (line 37) | func (c *CreatePartitionsRequest) decode(pd packetDecoder, version int...
    method key (line 67) | func (r *CreatePartitionsRequest) key() int16 {
    method version (line 71) | func (r *CreatePartitionsRequest) version() int16 {
    method headerVersion (line 75) | func (r *CreatePartitionsRequest) headerVersion() int16 {
    method isValidVersion (line 79) | func (r *CreatePartitionsRequest) isValidVersion() bool {
    method requiredVersion (line 83) | func (r *CreatePartitionsRequest) requiredVersion() KafkaVersion {
  type TopicPartition (line 94) | type TopicPartition struct
    method encode (line 99) | func (t *TopicPartition) encode(pe packetEncoder) error {
    method decode (line 120) | func (t *TopicPartition) decode(pd packetDecoder, version int16) (err ...

FILE: create_partitions_request_test.go
  function TestCreatePartitionsRequest (line 34) | func TestCreatePartitionsRequest(t *testing.T) {

FILE: create_partitions_response.go
  type CreatePartitionsResponse (line 8) | type CreatePartitionsResponse struct
    method setVersion (line 14) | func (c *CreatePartitionsResponse) setVersion(v int16) {
    method encode (line 18) | func (c *CreatePartitionsResponse) encode(pe packetEncoder) error {
    method decode (line 36) | func (c *CreatePartitionsResponse) decode(pd packetDecoder, version in...
    method key (line 61) | func (r *CreatePartitionsResponse) key() int16 {
    method version (line 65) | func (r *CreatePartitionsResponse) version() int16 {
    method headerVersion (line 69) | func (r *CreatePartitionsResponse) headerVersion() int16 {
    method isValidVersion (line 73) | func (r *CreatePartitionsResponse) isValidVersion() bool {
    method requiredVersion (line 77) | func (r *CreatePartitionsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 88) | func (r *CreatePartitionsResponse) throttleTime() time.Duration {
  type TopicPartitionError (line 92) | type TopicPartitionError struct
    method Error (line 97) | func (t *TopicPartitionError) Error() string {
    method Unwrap (line 105) | func (t *TopicPartitionError) Unwrap() error {
    method encode (line 109) | func (t *TopicPartitionError) encode(pe packetEncoder) error {
    method decode (line 119) | func (t *TopicPartitionError) decode(pd packetDecoder, version int16) ...

FILE: create_partitions_response_test.go
  function TestCreatePartitionsResponse (line 30) | func TestCreatePartitionsResponse(t *testing.T) {
  function TestTopicPartitionError (line 57) | func TestTopicPartitionError(t *testing.T) {

FILE: create_topics_request.go
  type CreateTopicsRequest (line 7) | type CreateTopicsRequest struct
    method setVersion (line 19) | func (c *CreateTopicsRequest) setVersion(v int16) {
    method encode (line 52) | func (c *CreateTopicsRequest) encode(pe packetEncoder) error {
    method decode (line 75) | func (c *CreateTopicsRequest) decode(pd packetDecoder, version int16) ...
    method key (line 112) | func (c *CreateTopicsRequest) key() int16 {
    method version (line 116) | func (c *CreateTopicsRequest) version() int16 {
    method headerVersion (line 120) | func (c *CreateTopicsRequest) headerVersion() int16 {
    method isFlexible (line 127) | func (c *CreateTopicsRequest) isFlexible() bool {
    method isFlexibleVersion (line 131) | func (c *CreateTopicsRequest) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 135) | func (c *CreateTopicsRequest) isValidVersion() bool {
    method requiredVersion (line 139) | func (c *CreateTopicsRequest) requiredVersion() KafkaVersion {
  function NewCreateTopicsRequest (line 23) | func NewCreateTopicsRequest(
  type TopicDetail (line 158) | type TopicDetail struct
    method encode (line 174) | func (t *TopicDetail) encode(pe packetEncoder) error {
    method decode (line 206) | func (t *TopicDetail) decode(pd packetDecoder, version int16) (err err...

FILE: create_topics_request_test.go
  function TestCreateTopicsRequest (line 46) | func TestCreateTopicsRequest(t *testing.T) {

FILE: create_topics_response.go
  type CreateTopicsResponse (line 8) | type CreateTopicsResponse struct
    method setVersion (line 20) | func (c *CreateTopicsResponse) setVersion(v int16) {
    method encode (line 24) | func (c *CreateTopicsResponse) encode(pe packetEncoder) error {
    method decode (line 54) | func (c *CreateTopicsResponse) decode(pd packetDecoder, version int16)...
    method key (line 95) | func (c *CreateTopicsResponse) key() int16 {
    method version (line 99) | func (c *CreateTopicsResponse) version() int16 {
    method headerVersion (line 103) | func (c *CreateTopicsResponse) headerVersion() int16 {
    method isFlexible (line 110) | func (c *CreateTopicsResponse) isFlexible() bool {
    method isFlexibleVersion (line 114) | func (c *CreateTopicsResponse) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 118) | func (c *CreateTopicsResponse) isValidVersion() bool {
    method requiredVersion (line 122) | func (c *CreateTopicsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 141) | func (r *CreateTopicsResponse) throttleTime() time.Duration {
  type TopicError (line 145) | type TopicError struct
    method Error (line 150) | func (t *TopicError) Error() string {
    method Unwrap (line 158) | func (t *TopicError) Unwrap() error {
    method encode (line 162) | func (t *TopicError) encode(pe packetEncoder, version int16) error {
    method decode (line 174) | func (t *TopicError) decode(pd packetDecoder, version int16) (err erro...
  type CreatableTopicResult (line 190) | type CreatableTopicResult struct
    method encode (line 201) | func (r *CreatableTopicResult) encode(pe packetEncoder, version int16)...
    method decode (line 233) | func (r *CreatableTopicResult) decode(pd packetDecoder, version int16)...
  type CreatableTopicConfigs (line 275) | type CreatableTopicConfigs struct
    method encode (line 286) | func (c *CreatableTopicConfigs) encode(pe packetEncoder, version int16...
    method decode (line 297) | func (c *CreatableTopicConfigs) decode(pd packetDecoder, version int16...

FILE: create_topics_response_test.go
  function TestCreateTopicsResponse (line 75) | func TestCreateTopicsResponse(t *testing.T) {
  function TestTopicError (line 116) | func TestTopicError(t *testing.T) {

FILE: decompress.go
  function decompress (line 36) | func decompress(cc CompressionCodec, data []byte) ([]byte, error) {

FILE: delete_groups_request.go
  type DeleteGroupsRequest (line 3) | type DeleteGroupsRequest struct
    method setVersion (line 8) | func (r *DeleteGroupsRequest) setVersion(v int16) {
    method encode (line 12) | func (r *DeleteGroupsRequest) encode(pe packetEncoder) error {
    method decode (line 20) | func (r *DeleteGroupsRequest) decode(pd packetDecoder, version int16) ...
    method key (line 29) | func (r *DeleteGroupsRequest) key() int16 {
    method version (line 33) | func (r *DeleteGroupsRequest) version() int16 {
    method headerVersion (line 37) | func (r *DeleteGroupsRequest) headerVersion() int16 {
    method isFlexible (line 44) | func (r *DeleteGroupsRequest) isFlexible() bool {
    method isFlexibleVersion (line 48) | func (r *DeleteGroupsRequest) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 52) | func (r *DeleteGroupsRequest) isValidVersion() bool {
    method requiredVersion (line 56) | func (r *DeleteGroupsRequest) requiredVersion() KafkaVersion {
    method AddGroup (line 69) | func (r *DeleteGroupsRequest) AddGroup(group string) {

FILE: delete_groups_request_test.go
  function TestDeleteGroupsRequest (line 40) | func TestDeleteGroupsRequest(t *testing.T) {
  function TestDeleteGroupsRequestV2 (line 56) | func TestDeleteGroupsRequestV2(t *testing.T) {

FILE: delete_groups_response.go
  type DeleteGroupsResponse (line 7) | type DeleteGroupsResponse struct
    method setVersion (line 13) | func (r *DeleteGroupsResponse) setVersion(v int16) {
    method encode (line 17) | func (r *DeleteGroupsResponse) encode(pe packetEncoder) error {
    method decode (line 35) | func (r *DeleteGroupsResponse) decode(pd packetDecoder, version int16)...
    method key (line 69) | func (r *DeleteGroupsResponse) key() int16 {
    method version (line 73) | func (r *DeleteGroupsResponse) version() int16 {
    method headerVersion (line 77) | func (r *DeleteGroupsResponse) headerVersion() int16 {
    method isFlexible (line 84) | func (r *DeleteGroupsResponse) isFlexible() bool {
    method isFlexibleVersion (line 88) | func (r *DeleteGroupsResponse) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 92) | func (r *DeleteGroupsResponse) isValidVersion() bool {
    method requiredVersion (line 96) | func (r *DeleteGroupsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 109) | func (r *DeleteGroupsResponse) throttleTime() time.Duration {

FILE: delete_groups_response_test.go
  function TestDeleteGroupsResponse (line 55) | func TestDeleteGroupsResponse(t *testing.T) {
  function TestDeleteGroupsResponseV2 (line 86) | func TestDeleteGroupsResponseV2(t *testing.T) {

FILE: delete_offsets_request.go
  type DeleteOffsetsRequest (line 3) | type DeleteOffsetsRequest struct
    method setVersion (line 9) | func (r *DeleteOffsetsRequest) setVersion(v int16) {
    method encode (line 13) | func (r *DeleteOffsetsRequest) encode(pe packetEncoder) (err error) {
    method decode (line 39) | func (r *DeleteOffsetsRequest) decode(pd packetDecoder, version int16)...
    method key (line 75) | func (r *DeleteOffsetsRequest) key() int16 {
    method version (line 79) | func (r *DeleteOffsetsRequest) version() int16 {
    method headerVersion (line 83) | func (r *DeleteOffsetsRequest) headerVersion() int16 {
    method isValidVersion (line 87) | func (r *DeleteOffsetsRequest) isValidVersion() bool {
    method requiredVersion (line 91) | func (r *DeleteOffsetsRequest) requiredVersion() KafkaVersion {
    method AddPartition (line 95) | func (r *DeleteOffsetsRequest) AddPartition(topic string, partitionID ...

FILE: delete_offsets_request_test.go
  function TestDeleteOffsetsRequest (line 14) | func TestDeleteOffsetsRequest(t *testing.T) {

FILE: delete_offsets_response.go
  type DeleteOffsetsResponse (line 7) | type DeleteOffsetsResponse struct
    method setVersion (line 16) | func (r *DeleteOffsetsResponse) setVersion(v int16) {
    method AddError (line 20) | func (r *DeleteOffsetsResponse) AddError(topic string, partition int32...
    method encode (line 32) | func (r *DeleteOffsetsResponse) encode(pe packetEncoder) error {
    method decode (line 54) | func (r *DeleteOffsetsResponse) decode(pd packetDecoder, version int16...
    method key (line 99) | func (r *DeleteOffsetsResponse) key() int16 {
    method version (line 103) | func (r *DeleteOffsetsResponse) version() int16 {
    method headerVersion (line 107) | func (r *DeleteOffsetsResponse) headerVersion() int16 {
    method isValidVersion (line 111) | func (r *DeleteOffsetsResponse) isValidVersion() bool {
    method requiredVersion (line 115) | func (r *DeleteOffsetsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 119) | func (r *DeleteOffsetsResponse) throttleTime() time.Duration {

FILE: delete_offsets_response_test.go
  function TestDeleteOffsetsResponse (line 37) | func TestDeleteOffsetsResponse(t *testing.T) {

FILE: delete_records_request.go
  type DeleteRecordsRequest (line 16) | type DeleteRecordsRequest struct
    method setVersion (line 22) | func (d *DeleteRecordsRequest) setVersion(v int16) {
    method encode (line 26) | func (d *DeleteRecordsRequest) encode(pe packetEncoder) error {
    method decode (line 48) | func (d *DeleteRecordsRequest) decode(pd packetDecoder, version int16)...
    method key (line 78) | func (d *DeleteRecordsRequest) key() int16 {
    method version (line 82) | func (d *DeleteRecordsRequest) version() int16 {
    method headerVersion (line 86) | func (d *DeleteRecordsRequest) headerVersion() int16 {
    method isValidVersion (line 90) | func (d *DeleteRecordsRequest) isValidVersion() bool {
    method requiredVersion (line 94) | func (d *DeleteRecordsRequest) requiredVersion() KafkaVersion {
  type DeleteRecordsRequestTopic (line 103) | type DeleteRecordsRequestTopic struct
    method encode (line 107) | func (t *DeleteRecordsRequestTopic) encode(pe packetEncoder) error {
    method decode (line 123) | func (t *DeleteRecordsRequestTopic) decode(pd packetDecoder, version i...

FILE: delete_records_request_test.go
  function TestDeleteRecordsRequest (line 23) | func TestDeleteRecordsRequest(t *testing.T) {

FILE: delete_records_response.go
  type DeleteRecordsResponse (line 16) | type DeleteRecordsResponse struct
    method setVersion (line 22) | func (d *DeleteRecordsResponse) setVersion(v int16) {
    method encode (line 26) | func (d *DeleteRecordsResponse) encode(pe packetEncoder) error {
    method decode (line 48) | func (d *DeleteRecordsResponse) decode(pd packetDecoder, version int16...
    method key (line 78) | func (d *DeleteRecordsResponse) key() int16 {
    method version (line 82) | func (d *DeleteRecordsResponse) version() int16 {
    method headerVersion (line 86) | func (d *DeleteRecordsResponse) headerVersion() int16 {
    method isValidVersion (line 90) | func (d *DeleteRecordsResponse) isValidVersion() bool {
    method requiredVersion (line 94) | func (d *DeleteRecordsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 103) | func (r *DeleteRecordsResponse) throttleTime() time.Duration {
  type DeleteRecordsResponseTopic (line 107) | type DeleteRecordsResponseTopic struct
    method encode (line 111) | func (t *DeleteRecordsResponseTopic) encode(pe packetEncoder) error {
    method decode (line 129) | func (t *DeleteRecordsResponseTopic) decode(pd packetDecoder, version ...
  type DeleteRecordsResponsePartition (line 153) | type DeleteRecordsResponsePartition struct
    method encode (line 158) | func (t *DeleteRecordsResponsePartition) encode(pe packetEncoder) error {
    method decode (line 164) | func (t *DeleteRecordsResponsePartition) decode(pd packetDecoder, vers...

FILE: delete_records_response_test.go
  function TestDeleteRecordsResponse (line 25) | func TestDeleteRecordsResponse(t *testing.T) {

FILE: delete_topics_request.go
  type DeleteTopicsRequest (line 5) | type DeleteTopicsRequest struct
    method setVersion (line 11) | func (d *DeleteTopicsRequest) setVersion(v int16) {
    method encode (line 32) | func (d *DeleteTopicsRequest) encode(pe packetEncoder) error {
    method decode (line 41) | func (d *DeleteTopicsRequest) decode(pd packetDecoder, version int16) ...
    method key (line 56) | func (d *DeleteTopicsRequest) key() int16 {
    method version (line 60) | func (d *DeleteTopicsRequest) version() int16 {
    method headerVersion (line 64) | func (d *DeleteTopicsRequest) headerVersion() int16 {
    method isFlexible (line 71) | func (d *DeleteTopicsRequest) isFlexible() bool {
    method isFlexibleVersion (line 75) | func (d *DeleteTopicsRequest) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 79) | func (d *DeleteTopicsRequest) isValidVersion() bool {
    method requiredVersion (line 83) | func (d *DeleteTopicsRequest) requiredVersion() KafkaVersion {
  function NewDeleteTopicsRequest (line 15) | func NewDeleteTopicsRequest(version KafkaVersion, topics []string, timeo...

FILE: delete_topics_request_test.go
  function TestDeleteTopicsRequestV0 (line 26) | func TestDeleteTopicsRequestV0(t *testing.T) {
  function TestDeleteTopicsRequestV1 (line 36) | func TestDeleteTopicsRequestV1(t *testing.T) {
  function TestDeleteTopicsRequestV4 (line 46) | func TestDeleteTopicsRequestV4(t *testing.T) {

FILE: delete_topics_response.go
  type DeleteTopicsResponse (line 7) | type DeleteTopicsResponse struct
    method setVersion (line 13) | func (d *DeleteTopicsResponse) setVersion(v int16) {
    method encode (line 17) | func (d *DeleteTopicsResponse) encode(pe packetEncoder) error {
    method decode (line 37) | func (d *DeleteTopicsResponse) decode(pd packetDecoder, version int16)...
    method key (line 72) | func (d *DeleteTopicsResponse) key() int16 {
    method version (line 76) | func (d *DeleteTopicsResponse) version() int16 {
    method headerVersion (line 80) | func (d *DeleteTopicsResponse) headerVersion() int16 {
    method isFlexible (line 87) | func (d *DeleteTopicsResponse) isFlexible() bool {
    method isFlexibleVersion (line 91) | func (d *DeleteTopicsResponse) isFlexibleVersion(version int16) bool {
    method isValidVersion (line 95) | func (d *DeleteTopicsResponse) isValidVersion() bool {
    method requiredVersion (line 99) | func (d *DeleteTopicsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 116) | func (r *DeleteTopicsResponse) throttleTime() time.Duration {

FILE: delete_topics_response_test.go
  function TestDeleteTopicsResponse (line 34) | func TestDeleteTopicsResponse(t *testing.T) {

FILE: describe_client_quotas_request.go
  type DescribeClientQuotasRequest (line 20) | type DescribeClientQuotasRequest struct
    method setVersion (line 37) | func (d *DescribeClientQuotasRequest) setVersion(v int16) {
    method encode (line 51) | func (d *DescribeClientQuotasRequest) encode(pe packetEncoder) error {
    method decode (line 70) | func (d *DescribeClientQuotasRequest) decode(pd packetDecoder, version...
    method key (line 157) | func (d *DescribeClientQuotasRequest) key() int16 {
    method version (line 161) | func (d *DescribeClientQuotasRequest) version() int16 {
    method headerVersion (line 165) | func (d *DescribeClientQuotasRequest) headerVersion() int16 {
    method isValidVersion (line 173) | func (d *DescribeClientQuotasRequest) isValidVersion() bool {
    method isFlexible (line 177) | func (d *DescribeClientQuotasRequest) isFlexible() bool {
    method isFlexibleVersion (line 181) | func (d *DescribeClientQuotasRequest) isFlexibleVersion(version int16)...
    method requiredVersion (line 185) | func (d *DescribeClientQuotasRequest) requiredVersion() KafkaVersion {
  function NewDescribeClientQuotasRequest (line 26) | func NewDescribeClientQuotasRequest(version KafkaVersion, components []Q...
  type QuotaFilterComponent (line 45) | type QuotaFilterComponent struct
    method encode (line 100) | func (d *QuotaFilterComponent) encode(pe packetEncoder) error {
    method decode (line 129) | func (d *QuotaFilterComponent) decode(pd packetDecoder, version int16)...

FILE: describe_client_quotas_request_test.go
  function TestDescribeClientQuotasRequest (line 51) | func TestDescribeClientQuotasRequest(t *testing.T) {
  function TestDescribeClientQuotasRequestV1 (line 98) | func TestDescribeClientQuotasRequestV1(t *testing.T) {

FILE: describe_client_quotas_response.go
  type DescribeClientQuotasResponse (line 30) | type DescribeClientQuotasResponse struct
    method setVersion (line 38) | func (d *DescribeClientQuotasResponse) setVersion(v int16) {
    method encode (line 53) | func (d *DescribeClientQuotasResponse) encode(pe packetEncoder) error {
    method decode (line 79) | func (d *DescribeClientQuotasResponse) decode(pd packetDecoder, versio...
    method key (line 244) | func (d *DescribeClientQuotasResponse) key() int16 {
    method version (line 248) | func (d *DescribeClientQuotasResponse) version() int16 {
    method headerVersion (line 252) | func (d *DescribeClientQuotasResponse) headerVersion() int16 {
    method isValidVersion (line 260) | func (d *DescribeClientQuotasResponse) isValidVersion() bool {
    method isFlexible (line 264) | func (d *DescribeClientQuotasResponse) isFlexible() bool {
    method isFlexibleVersion (line 268) | func (d *DescribeClientQuotasResponse) isFlexibleVersion(version int16...
    method requiredVersion (line 272) | func (d *DescribeClientQuotasResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 283) | func (r *DescribeClientQuotasResponse) throttleTime() time.Duration {
  type DescribeClientQuotasEntry (line 42) | type DescribeClientQuotasEntry struct
    method encode (line 119) | func (d *DescribeClientQuotasEntry) encode(pe packetEncoder) error {
    method decode (line 148) | func (d *DescribeClientQuotasEntry) decode(pd packetDecoder, version i...
  type QuotaEntityComponent (line 47) | type QuotaEntityComponent struct
    method encode (line 199) | func (c *QuotaEntityComponent) encode(pe packetEncoder) error {
    method decode (line 219) | func (c *QuotaEntityComponent) decode(pd packetDecoder, version int16)...

FILE: describe_client_quotas_response_test.go
  function TestDescribeClientQuotasResponse (line 71) | func TestDescribeClientQuotasResponse(t *testing.T) {
  function TestDescribeClientQuotasResponseV1 (line 122) | func TestDescribeClientQuotasResponseV1(t *testing.T) {

FILE: describe_cluster_request.go
  constant DescribeClusterEndpointTypeBrokers (line 6) | DescribeClusterEndpointTypeBrokers     int8 = 1
  constant DescribeClusterEndpointTypeControllers (line 7) | DescribeClusterEndpointTypeControllers int8 = 2
  type DescribeClusterRequest (line 10) | type DescribeClusterRequest struct
    method encode (line 40) | func (r *DescribeClusterRequest) encode(pe packetEncoder) error {
    method decode (line 57) | func (r *DescribeClusterRequest) decode(pd packetDecoder, version int1...
    method key (line 82) | func (r *DescribeClusterRequest) key() int16 { return apiKeyDescribeCl...
    method version (line 84) | func (r *DescribeClusterRequest) version() int16 { return r.Version }
    method setVersion (line 86) | func (r *DescribeClusterRequest) setVersion(v int16) { r.Version = v }
    method headerVersion (line 88) | func (r *DescribeClusterRequest) headerVersion() int16 { return 2 }
    method isValidVersion (line 90) | func (r *DescribeClusterRequest) isValidVersion() bool {
    method isFlexible (line 94) | func (r *DescribeClusterRequest) isFlexible() bool { return true }
    method isFlexibleVersion (line 96) | func (r *DescribeClusterRequest) isFlexibleVersion(version int16) bool...
    method requiredVersion (line 98) | func (r *DescribeClusterRequest) requiredVersion() KafkaVersion {
  function NewDescribeClusterRequest (line 18) | func NewDescribeClusterRequest(version KafkaVersion) *DescribeClusterReq...

FILE: describe_cluster_request_test.go
  function TestDescribeClusterRequestVersions (line 7) | func TestDescribeClusterRequestVersions(t *testing.T) {
  function TestNewDescribeClusterRequest (line 32) | func TestNewDescribeClusterRequest(t *testing.T) {

FILE: describe_cluster_response.go
  type DescribeClusterResponse (line 5) | type DescribeClusterResponse struct
    method encode (line 27) | func (r *DescribeClusterResponse) encode(pe packetEncoder) error {
    method decode (line 59) | func (r *DescribeClusterResponse) decode(pd packetDecoder, version int...
    method key (line 108) | func (r *DescribeClusterResponse) key() int16 { return apiKeyDescribeC...
    method version (line 110) | func (r *DescribeClusterResponse) version() int16 { return r.Version }
    method setVersion (line 112) | func (r *DescribeClusterResponse) setVersion(v int16) { r.Version = v }
    method headerVersion (line 114) | func (r *DescribeClusterResponse) headerVersion() int16 { return 1 }
    method isValidVersion (line 116) | func (r *DescribeClusterResponse) isValidVersion() bool {
    method isFlexible (line 120) | func (r *DescribeClusterResponse) isFlexible() bool { return true }
    method isFlexibleVersion (line 122) | func (r *DescribeClusterResponse) isFlexibleVersion(version int16) boo...
    method requiredVersion (line 124) | func (r *DescribeClusterResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 135) | func (r *DescribeClusterResponse) throttleTime() time.Duration {
  type DescribeClusterBroker (line 19) | type DescribeClusterBroker struct
    method encode (line 139) | func (b *DescribeClusterBroker) encode(pe packetEncoder, version int16...
    method decode (line 155) | func (b *DescribeClusterBroker) decode(pd packetDecoder, version int16...

FILE: describe_cluster_response_test.go
  function TestDescribeClusterResponse (line 7) | func TestDescribeClusterResponse(t *testing.T) {

FILE: describe_configs_request.go
  type DescribeConfigsRequest (line 3) | type DescribeConfigsRequest struct
    method setVersion (line 9) | func (r *DescribeConfigsRequest) setVersion(v int16) {
    method encode (line 19) | func (r *DescribeConfigsRequest) encode(pe packetEncoder) error {
    method decode (line 46) | func (r *DescribeConfigsRequest) decode(pd packetDecoder, version int1...
    method key (line 98) | func (r *DescribeConfigsRequest) key() int16 {
    method version (line 102) | func (r *DescribeConfigsRequest) version() int16 {
    method headerVersion (line 106) | func (r *DescribeConfigsRequest) headerVersion() int16 {
    method isValidVersion (line 110) | func (r *DescribeConfigsRequest) isValidVersion() bool {
    method requiredVersion (line 114) | func (r *DescribeConfigsRequest) requiredVersion() KafkaVersion {
  type ConfigResource (line 13) | type ConfigResource struct

FILE: describe_configs_request_test.go
  function TestDescribeConfigsRequestv0 (line 53) | func TestDescribeConfigsRequestv0(t *testing.T) {
  function TestDescribeConfigsRequestv1 (line 106) | func TestDescribeConfigsRequestv1(t *testing.T) {

FILE: describe_configs_response.go
  type ConfigSource (line 8) | type ConfigSource
    method String (line 10) | func (s ConfigSource) String() string {
  constant SourceUnknown (line 29) | SourceUnknown ConfigSource = iota
  constant SourceTopic (line 30) | SourceTopic
  constant SourceDynamicBroker (line 31) | SourceDynamicBroker
  constant SourceDynamicDefaultBroker (line 32) | SourceDynamicDefaultBroker
  constant SourceStaticBroker (line 33) | SourceStaticBroker
  constant SourceDefault (line 34) | SourceDefault
  type DescribeConfigError (line 37) | type DescribeConfigError struct
    method Error (line 42) | func (c *DescribeConfigError) Error() string {
  type DescribeConfigsResponse (line 50) | type DescribeConfigsResponse struct
    method setVersion (line 56) | func (r *DescribeConfigsResponse) setVersion(v int16) {
    method encode (line 84) | func (r *DescribeConfigsResponse) encode(pe packetEncoder) (err error) {
    method decode (line 99) | func (r *DescribeConfigsResponse) decode(pd packetDecoder, version int...
    method key (line 122) | func (r *DescribeConfigsResponse) key() int16 {
    method version (line 126) | func (r *DescribeConfigsResponse) version() int16 {
    method headerVersion (line 130) | func (r *DescribeConfigsResponse) headerVersion() int16 {
    method isValidVersion (line 134) | func (r *DescribeConfigsResponse) isValidVersion() bool {
    method requiredVersion (line 138) | func (r *DescribeConfigsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 151) | func (r *DescribeConfigsResponse) throttleTime() time.Duration {
  type ResourceResponse (line 60) | type ResourceResponse struct
    method encode (line 155) | func (r *ResourceResponse) encode(pe packetEncoder, version int16) (er...
    method decode (line 180) | func (r *ResourceResponse) decode(pd packetDecoder, version int16) (er...
  type ConfigEntry (line 68) | type ConfigEntry struct
    method encode (line 221) | func (r *ConfigEntry) encode(pe packetEncoder, version int16) (err err...
    method decode (line 253) | func (r *ConfigEntry) decode(pd packetDecoder, version int16) (err err...
  type ConfigSynonym (line 78) | type ConfigSynonym struct
    method encode (line 317) | func (c *ConfigSynonym) encode(pe packetEncoder, version int16) (err e...
    method decode (line 333) | func (c *ConfigSynonym) decode(pd packetDecoder, version int16) error {

FILE: describe_configs_response_test.go
  function TestDescribeConfigsResponsev0 (line 97) | func TestDescribeConfigsResponsev0(t *testing.T) {
  function TestDescribeConfigsResponseWithDefaultv0 (line 131) | func TestDescribeConfigsResponseWithDefaultv0(t *testing.T) {
  function TestDescribeConfigsResponsev1 (line 165) | func TestDescribeConfigsResponsev1(t *testing.T) {
  function TestDescribeConfigsResponseWithSynonym (line 201) | func TestDescribeConfigsResponseWithSynonym(t *testing.T) {
  function TestDescribeConfigsResponseWithDefaultv1 (line 243) | func TestDescribeConfigsResponseWithDefaultv1(t *testing.T) {

FILE: describe_groups_request.go
  type DescribeGroupsRequest (line 3) | type DescribeGroupsRequest struct
    method setVersion (line 9) | func (r *DescribeGroupsRequest) setVersion(v int16) {
    method encode (line 13) | func (r *DescribeGroupsRequest) encode(pe packetEncoder) error {
    method decode (line 24) | func (r *DescribeGroupsRequest) decode(pd packetDecoder, version int16...
    method key (line 39) | func (r *DescribeGroupsRequest) key() int16 {
    method version (line 43) | func (r *DescribeGroupsRequest) version() int16 {
    method headerVersion (line 47) | func (r *DescribeGroupsRequest) headerVersion() int16 {
    method isValidVersion (line 54) | func (r *DescribeGroupsRequest) isValidVersion() bool {
    method isFlexible (line 58) | func (r *DescribeGroupsRequest) isFlexible() bool {
    method isFlexibleVersion (line 62) | func (r *DescribeGroupsRequest) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 66) | func (r *DescribeGroupsRequest) requiredVersion() KafkaVersion {
    method AddGroup (line 85) | func (r *DescribeGroupsRequest) AddGroup(group string) {

FILE: describe_groups_request_test.go
  function TestDescribeGroupsRequestV0 (line 22) | func TestDescribeGroupsRequestV0(t *testing.T) {
  function TestDescribeGroupsRequestV3 (line 55) | func TestDescribeGroupsRequestV3(t *testing.T) {
  function TestDescribeGroupsRequestV5 (line 98) | func TestDescribeGroupsRequestV5(t *testing.T) {

FILE: describe_groups_response.go
  type DescribeGroupsResponse (line 5) | type DescribeGroupsResponse struct
    method setVersion (line 16) | func (r *DescribeGroupsResponse) setVersion(v int16) {
    method encode (line 20) | func (r *DescribeGroupsResponse) encode(pe packetEncoder) (err error) {
    method decode (line 38) | func (r *DescribeGroupsResponse) decode(pd packetDecoder, version int1...
    method key (line 62) | func (r *DescribeGroupsResponse) key() int16 {
    method version (line 66) | func (r *DescribeGroupsResponse) version() int16 {
    method headerVersion (line 70) | func (r *DescribeGroupsResponse) headerVersion() int16 {
    method isValidVersion (line 77) | func (r *DescribeGroupsResponse) isValidVersion() bool {
    method isFlexible (line 81) | func (r *DescribeGroupsResponse) isFlexible() bool {
    method isFlexibleVersion (line 85) | func (r *DescribeGroupsResponse) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 89) | func (r *DescribeGroupsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 108) | func (r *DescribeGroupsResponse) throttleTime() time.Duration {
  type GroupDescription (line 113) | type GroupDescription struct
    method encode (line 135) | func (gd *GroupDescription) encode(pe packetEncoder, version int16) (e...
    method decode (line 170) | func (gd *GroupDescription) decode(pd packetDecoder, version int16) (e...
  type GroupMemberDescription (line 215) | type GroupMemberDescription struct
    method encode (line 236) | func (gmd *GroupMemberDescription) encode(pe packetEncoder, version in...
    method decode (line 263) | func (gmd *GroupMemberDescription) decode(pd packetDecoder, version in...
    method GetMemberAssignment (line 290) | func (gmd *GroupMemberDescription) GetMemberAssignment() (*ConsumerGro...
    method GetMemberMetadata (line 299) | func (gmd *GroupMemberDescription) GetMemberMetadata() (*ConsumerGroup...

FILE: describe_groups_response_test.go
  function TestDescribeGroupsResponseV0 (line 43) | func TestDescribeGroupsResponseV0(t *testing.T) {
  function TestDescribeGroupsResponseV1plus (line 204) | func TestDescribeGroupsResponseV1plus(t *testing.T) {

FILE: describe_log_dirs_request.go
  type DescribeLogDirsRequest (line 4) | type DescribeLogDirsRequest struct
    method setVersion (line 13) | func (r *DescribeLogDirsRequest) setVersion(v int16) {
    method encode (line 23) | func (r *DescribeLogDirsRequest) encode(pe packetEncoder) error {
    method decode (line 48) | func (r *DescribeLogDirsRequest) decode(pd packetDecoder, version int1...
    method key (line 84) | func (r *DescribeLogDirsRequest) key() int16 {
    method version (line 88) | func (r *DescribeLogDirsRequest) version() int16 {
    method headerVersion (line 92) | func (r *DescribeLogDirsRequest) headerVersion() int16 {
    method isValidVersion (line 99) | func (r *DescribeLogDirsRequest) isValidVersion() bool {
    method isFlexible (line 103) | func (r *DescribeLogDirsRequest) isFlexible() bool {
    method isFlexibleVersion (line 107) | func (r *DescribeLogDirsRequest) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 111) | func (r *DescribeLogDirsRequest) requiredVersion() KafkaVersion {
  type DescribeLogDirsRequestTopic (line 18) | type DescribeLogDirsRequestTopic struct

FILE: describe_log_dirs_request_test.go
  function TestDescribeLogDirsRequest (line 29) | func TestDescribeLogDirsRequest(t *testing.T) {

FILE: describe_log_dirs_response.go
  type DescribeLogDirsResponse (line 5) | type DescribeLogDirsResponse struct
    method setVersion (line 17) | func (r *DescribeLogDirsResponse) setVersion(v int16) {
    method encode (line 21) | func (r *DescribeLogDirsResponse) encode(pe packetEncoder) error {
    method decode (line 42) | func (r *DescribeLogDirsResponse) decode(pd packetDecoder, version int...
    method key (line 73) | func (r *DescribeLogDirsResponse) key() int16 {
    method version (line 77) | func (r *DescribeLogDirsResponse) version() int16 {
    method headerVersion (line 81) | func (r *DescribeLogDirsResponse) headerVersion() int16 {
    method isValidVersion (line 88) | func (r *DescribeLogDirsResponse) isValidVersion() bool {
    method isFlexible (line 92) | func (r *DescribeLogDirsResponse) isFlexible() bool {
    method isFlexibleVersion (line 96) | func (r *DescribeLogDirsResponse) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 100) | func (r *DescribeLogDirsResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 115) | func (r *DescribeLogDirsResponse) throttleTime() time.Duration {
  type DescribeLogDirsResponseDirMetadata (line 119) | type DescribeLogDirsResponseDirMetadata struct
    method encode (line 130) | func (r *DescribeLogDirsResponseDirMetadata) encode(pe packetEncoder, ...
    method decode (line 156) | func (r *DescribeLogDirsResponseDirMetadata) decode(pd packetDecoder, ...
  type DescribeLogDirsResponseTopic (line 203) | type DescribeLogDirsResponseTopic struct
    method encode (line 208) | func (r *DescribeLogDirsResponseTopic) encode(pe packetEncoder, versio...
    method decode (line 225) | func (r *DescribeLogDirsResponseTopic) decode(pd packetDecoder, versio...
  type DescribeLogDirsResponsePartition (line 251) | type DescribeLogDirsResponsePartition struct
    method encode (line 266) | func (r *DescribeLogDirsResponsePartition) encode(pe packetEncoder, ve...
    method decode (line 279) | func (r *DescribeLogDirsResponsePartition) decode(pd packetDecoder, ve...

FILE: describe_log_dirs_response_test.go
  function TestDescribeLogDirsResponse (line 128) | func TestDescribeLogDirsResponse(t *testing.T) {
  function TestDescribeLogDirsResponseV2 (line 175) | func TestDescribeLogDirsResponseV2(t *testing.T) {
  function TestDescribeLogDirsResponseV3 (line 222) | func TestDescribeLogDirsResponseV3(t *testing.T) {
  function TestDescribeLogDirsResponseV4 (line 269) | func TestDescribeLogDirsResponseV4(t *testing.T) {

FILE: describe_user_scram_credentials_request.go
  type DescribeUserScramCredentialsRequest (line 4) | type DescribeUserScramCredentialsRequest struct
    method setVersion (line 12) | func (r *DescribeUserScramCredentialsRequest) setVersion(v int16) {
    method encode (line 21) | func (r *DescribeUserScramCredentialsRequest) encode(pe packetEncoder)...
    method decode (line 36) | func (r *DescribeUserScramCredentialsRequest) decode(pd packetDecoder,...
    method key (line 60) | func (r *DescribeUserScramCredentialsRequest) key() int16 {
    method version (line 64) | func (r *DescribeUserScramCredentialsRequest) version() int16 {
    method headerVersion (line 68) | func (r *DescribeUserScramCredentialsRequest) headerVersion() int16 {
    method isValidVersion (line 72) | func (r *DescribeUserScramCredentialsRequest) isValidVersion() bool {
    method isFlexible (line 76) | func (r *DescribeUserScramCredentialsRequest) isFlexible() bool {
    method isFlexibleVersion (line 80) | func (r *DescribeUserScramCredentialsRequest) isFlexibleVersion(versio...
    method requiredVersion (line 84) | func (r *DescribeUserScramCredentialsRequest) requiredVersion() KafkaV...
  type DescribeUserScramCredentialsRequestUser (line 17) | type DescribeUserScramCredentialsRequestUser struct

FILE: describe_user_scram_credentials_request_test.go
  function TestDescribeUserScramCredentialsRequest (line 19) | func TestDescribeUserScramCredentialsRequest(t *testing.T) {

FILE: describe_user_scram_credentials_response.go
  type ScramMechanismType (line 5) | type ScramMechanismType
    method String (line 13) | func (s ScramMechanismType) String() string {
  constant SCRAM_MECHANISM_UNKNOWN (line 8) | SCRAM_MECHANISM_UNKNOWN ScramMechanismType = iota
  constant SCRAM_MECHANISM_SHA_256 (line 9) | SCRAM_MECHANISM_SHA_256
  constant SCRAM_MECHANISM_SHA_512 (line 10) | SCRAM_MECHANISM_SHA_512
  type DescribeUserScramCredentialsResponse (line 24) | type DescribeUserScramCredentialsResponse struct
    method setVersion (line 36) | func (r *DescribeUserScramCredentialsResponse) setVersion(v int16) {
    method encode (line 54) | func (r *DescribeUserScramCredentialsResponse) encode(pe packetEncoder...
    method decode (line 90) | func (r *DescribeUserScramCredentialsResponse) decode(pd packetDecoder...
    method key (line 156) | func (r *DescribeUserScramCredentialsResponse) key() int16 {
    method version (line 160) | func (r *DescribeUserScramCredentialsResponse) version() int16 {
    method headerVersion (line 164) | func (r *DescribeUserScramCredentialsResponse) headerVersion() int16 {
    method isValidVersion (line 168) | func (r *DescribeUserScramCredentialsResponse) isValidVersion() bool {
    method isFlexible (line 172) | func (r *DescribeUserScramCredentialsResponse) isFlexible() bool {
    method isFlexibleVersion (line 176) | func (r *DescribeUserScramCredentialsResponse) isFlexibleVersion(versi...
    method requiredVersion (line 180) | func (r *DescribeUserScramCredentialsResponse) requiredVersion() Kafka...
    method throttleTime (line 184) | func (r *DescribeUserScramCredentialsResponse) throttleTime() time.Dur...
  type DescribeUserScramCredentialsResult (line 40) | type DescribeUserScramCredentialsResult struct
  type UserScramCredentialsResponseInfo (line 49) | type UserScramCredentialsResponseInfo struct

FILE: describe_user_scram_credentials_response_test.go
  function TestDescribeUserScramCredentialsResponse (line 34) | func TestDescribeUserScramCredentialsResponse(t *testing.T) {

FILE: elect_leaders_request.go
  type ElectLeadersRequest (line 3) | type ElectLeadersRequest struct
    method setVersion (line 10) | func (r *ElectLeadersRequest) setVersion(v int16) {
    method encode (line 14) | func (r *ElectLeadersRequest) encode(pe packetEncoder) error {
    method decode (line 41) | func (r *ElectLeadersRequest) decode(pd packetDecoder, version int16) ...
    method key (line 90) | func (r *ElectLeadersRequest) key() int16 {
    method version (line 94) | func (r *ElectLeadersRequest) version() int16 {
    method headerVersion (line 98) | func (r *ElectLeadersRequest) headerVersion() int16 {
    method isValidVersion (line 105) | func (r *ElectLeadersRequest) isValidVersion() bool {
    method isFlexible (line 109) | func (r *ElectLeadersRequest) isFlexible() bool {
    method isFlexibleVersion (line 113) | func (r *ElectLeadersRequest) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 117) | func (r *ElectLeadersRequest) requiredVersion() KafkaVersion {

FILE: elect_leaders_request_test.go
  function TestElectLeadersRequest (line 31) | func TestElectLeadersRequest(t *testing.T) {
  function TestElectLeadersRequestHeaderVersion (line 47) | func TestElectLeadersRequestHeaderVersion(t *testing.T) {
  function TestElectLeadersResponseHeaderVersion (line 90) | func TestElectLeadersResponseHeaderVersion(t *testing.T) {

FILE: elect_leaders_response.go
  type PartitionResult (line 5) | type PartitionResult struct
    method encode (line 10) | func (b *PartitionResult) encode(pe packetEncoder, version int16) error {
    method decode (line 19) | func (b *PartitionResult) decode(pd packetDecoder, version int16) (err...
  type ElectLeadersResponse (line 32) | type ElectLeadersResponse struct
    method setVersion (line 39) | func (r *ElectLeadersResponse) setVersion(v int16) {
    method encode (line 43) | func (r *ElectLeadersResponse) encode(pe packetEncoder) error {
    method decode (line 73) | func (r *ElectLeadersResponse) decode(pd packetDecoder, version int16)...
    method key (line 122) | func (r *ElectLeadersResponse) key() int16 {
    method version (line 126) | func (r *ElectLeadersResponse) version() int16 {
    method headerVersion (line 130) | func (r *ElectLeadersResponse) headerVersion() int16 {
    method isValidVersion (line 137) | func (r *ElectLeadersResponse) isValidVersion() bool {
    method isFlexible (line 141) | func (r *ElectLeadersResponse) isFlexible() bool {
    method isFlexibleVersion (line 145) | func (r *ElectLeadersResponse) isFlexibleVersion(version int16) bool {
    method requiredVersion (line 149) | func (r *ElectLeadersResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 162) | func (r *ElectLeadersResponse) throttleTime() time.Duration {

FILE: elect_leaders_response_test.go
  function TestElectLeadersResponse (line 19) | func TestElectLeadersResponse(t *testing.T) {

FILE: election_type.go
  type ElectionType (line 3) | type ElectionType
  constant PreferredElection (line 7) | PreferredElection ElectionType = 0
  constant UncleanElection (line 9) | UncleanElection ElectionType = 1

FILE: encoder_decoder.go
  type encoder (line 11) | type encoder interface
  type encoderWithHeader (line 15) | type encoderWithHeader interface
  function encode (line 21) | func encode(e encoder, metricRegistry metrics.Registry) ([]byte, error) {
  type decoder (line 50) | type decoder interface
  type versionedDecoder (line 54) | type versionedDecoder interface
  type flexibleVersion (line 58) | type flexibleVersion interface
  function decode (line 65) | func decode(buf []byte, in decoder, metricRegistry metrics.Registry) err...
  function versionedDecode (line 85) | func versionedDecode(buf []byte, in versionedDecoder, version int16, met...
  function prepareFlexibleDecoder (line 108) | func prepareFlexibleDecoder(pd *realDecoder, in versionedDecoder, versio...
  function prepareFlexibleEncoder (line 115) | func prepareFlexibleEncoder(pe packetEncoder, req encoder) packetEncoder {
  function downgradeFlexibleDecoder (line 129) | func downgradeFlexibleDecoder(pd packetDecoder) packetDecoder {

FILE: encoder_decoder_fuzz_test.go
  function FuzzDecodeEncodeProduceRequest (line 10) | func FuzzDecodeEncodeProduceRequest(f *testing.F) {
  function FuzzDecodeEncodeFetchRequest (line 38) | func FuzzDecodeEncodeFetchRequest(f *testing.F) {

FILE: end_txn_request.go
  type EndTxnRequest (line 3) | type EndTxnRequest struct
    method setVersion (line 11) | func (a *EndTxnRequest) setVersion(v int16) {
    method encode (line 15) | func (a *EndTxnRequest) encode(pe packetEncoder) error {
    method decode (line 29) | func (a *EndTxnRequest) decode(pd packetDecoder, version int16) (err e...
    method key (line 45) | func (a *EndTxnRequest) key() int16 {
    method version (line 49) | func (a *EndTxnRequest) version() int16 {
    method headerVersion (line 53) | func (r *EndTxnRequest) headerVersion() int16 {
    method isValidVersion (line 57) | func (a *EndTxnRequest) isValidVersion() bool {
    method requiredVersion (line 61) | func (a *EndTxnRequest) requiredVersion() KafkaVersion {

FILE: end_txn_request_test.go
  function TestEndTxnRequest (line 14) | func TestEndTxnRequest(t *testing.T) {

FILE: end_txn_response.go
  type EndTxnResponse (line 7) | type EndTxnResponse struct
    method setVersion (line 13) | func (e *EndTxnResponse) setVersion(v int16) {
    method encode (line 17) | func (e *EndTxnResponse) encode(pe packetEncoder) error {
    method decode (line 23) | func (e *EndTxnResponse) decode(pd packetDecoder, version int16) (err ...
    method key (line 36) | func (e *EndTxnResponse) key() int16 {
    method version (line 40) | func (e *EndTxnResponse) version() int16 {
    method headerVersion (line 44) | func (r *EndTxnResponse) headerVersion() int16 {
    method isValidVersion (line 48) | func (e *EndTxnResponse) isValidVersion() bool {
    method requiredVersion (line 52) | func (e *EndTxnResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 63) | func (r *EndTxnResponse) throttleTime() time.Duration {

FILE: end_txn_response_test.go
  function TestEndTxnResponse (line 15) | func TestEndTxnResponse(t *testing.T) {

FILE: errors.go
  function MultiErrorFormat (line 95) | func MultiErrorFormat(es []error) string {
  type sentinelError (line 110) | type sentinelError struct
    method Error (line 115) | func (err sentinelError) Error() string {
    method Is (line 123) | func (err sentinelError) Is(target error) bool {
    method Unwrap (line 127) | func (err sentinelError) Unwrap() error {
  function Wrap (line 131) | func Wrap(sentinel error, wrapped ...error) sentinelError {
  type PacketEncodingError (line 137) | type PacketEncodingError struct
    method Error (line 141) | func (err PacketEncodingError) Error() string {
  type PacketDecodingError (line 147) | type PacketDecodingError struct
    method Error (line 151) | func (err PacketDecodingError) Error() string {
  type ConfigurationError (line 157) | type ConfigurationError
    method Error (line 159) | func (err ConfigurationError) Error() string {
  type KError (line 165) | type KError
    method Error (line 263) | func (err KError) Error() string {
  constant ErrUnknown (line 169) | ErrUnknown                            KError = -1
  constant ErrNoError (line 170) | ErrNoError                            KError = 0
  constant ErrOffsetOutOfRange (line 171) | ErrOffsetOutOfRange                   KError = 1
  constant ErrInvalidMessage (line 172) | ErrInvalidMessage                     KError = 2
  constant ErrUnknownTopicOrPartition (line 173) | ErrUnknownTopicOrPartition            KError = 3
  constant ErrInvalidMessageSize (line 174) | ErrInvalidMessageSize                 KError = 4
  constant ErrLeaderNotAvailable (line 175) | ErrLeaderNotAvailable                 KError = 5
  constant ErrNotLeaderForPartition (line 176) | ErrNotLeaderForPartition              KError = 6
  constant ErrRequestTimedOut (line 177) | ErrRequestTimedOut                    KError = 7
  constant ErrBrokerNotAvailable (line 178) | ErrBrokerNotAvailable                 KError = 8
  constant ErrReplicaNotAvailable (line 179) | ErrReplicaNotAvailable                KError = 9
  constant ErrMessageSizeTooLarge (line 180) | ErrMessageSizeTooLarge                KError = 10
  constant ErrStaleControllerEpochCode (line 181) | ErrStaleControllerEpochCode           KError = 11
  constant ErrOffsetMetadataTooLarge (line 182) | ErrOffsetMetadataTooLarge             KError = 12
  constant ErrNetworkException (line 183) | ErrNetworkException                   KError = 13
  constant ErrOffsetsLoadInProgress (line 184) | ErrOffsetsLoadInProgress              KError = 14
  constant ErrConsumerCoordinatorNotAvailable (line 185) | ErrConsumerCoordinatorNotAvailable    KError = 15
  constant ErrNotCoordinatorForConsumer (line 186) | ErrNotCoordinatorForConsumer          KError = 16
  constant ErrInvalidTopic (line 187) | ErrInvalidTopic                       KError = 17
  constant ErrMessageSetSizeTooLarge (line 188) | ErrMessageSetSizeTooLarge             KError = 18
  constant ErrNotEnoughReplicas (line 189) | ErrNotEnoughReplicas                  KError = 19
  constant ErrNotEnoughReplicasAfterAppend (line 190) | ErrNotEnoughReplicasAfterAppend       KError = 20
  constant ErrInvalidRequiredAcks (line 191) | ErrInvalidRequiredAcks                KError = 21
  constant ErrIllegalGeneration (line 192) | ErrIllegalGeneration                  KError = 22
  constant ErrInconsistentGroupProtocol (line 193) | ErrInconsistentGroupProtocol          KError = 23
  constant ErrInvalidGroupId (line 194) | ErrInvalidGroupId                     KError = 24
  constant ErrUnknownMemberId (line 195) | ErrUnknownMemberId                    KError = 25
  constant ErrInvalidSessionTimeout (line 196) | ErrInvalidSessionTimeout              KError = 26
  constant ErrRebalanceInProgress (line 197) | ErrRebalanceInProgress                KError = 27
  constant ErrInvalidCommitOffsetSize (line 198) | ErrInvalidCommitOffsetSize            KError = 28
  constant ErrTopicAuthorizationFailed (line 199) | ErrTopicAuthorizationFailed           KError = 29
  constant ErrGroupAuthorizationFailed (line 200) | ErrGroupAuthorizationFailed           KError = 30
  constant ErrClusterAuthorizationFailed (line 201) | ErrClusterAuthorizationFailed         KError = 31
  constant ErrInvalidTimestamp (line 202) | ErrInvalidTimestamp                   KError = 32
  constant ErrUnsupportedSASLMechanism (line 203) | ErrUnsupportedSASLMechanism           KError = 33
  constant ErrIllegalSASLState (line 204) | ErrIllegalSASLState                   KError = 34
  constant ErrUnsupportedVersion (line 205) | ErrUnsupportedVersion                 KError = 35
  constant ErrTopicAlreadyExists (line 206) | ErrTopicAlreadyExists                 KError = 36
  constant ErrInvalidPartitions (line 207) | ErrInvalidPartitions                  KError = 37
  constant ErrInvalidReplicationFactor (line 208) | ErrInvalidReplicationFactor           KError = 38
  constant ErrInvalidReplicaAssignment (line 209) | ErrInvalidReplicaAssignment           KError = 39
  constant ErrInvalidConfig (line 210) | ErrInvalidConfig                      KError = 40
  constant ErrNotController (line 211) | ErrNotController                      KError = 41
  constant ErrInvalidRequest (line 212) | ErrInvalidRequest                     KError = 42
  constant ErrUnsupportedForMessageFormat (line 213) | ErrUnsupportedForMessageFormat        KError = 43
  constant ErrPolicyViolation (line 214) | ErrPolicyViolation                    KError = 44
  constant ErrOutOfOrderSequenceNumber (line 215) | ErrOutOfOrderSequenceNumber           KError = 45
  constant ErrDuplicateSequenceNumber (line 216) | ErrDuplicateSequenceNumber            KError = 46
  constant ErrInvalidProducerEpoch (line 217) | ErrInvalidProducerEpoch               KError = 47
  constant ErrInvalidTxnState (line 218) | ErrInvalidTxnState                    KError = 48
  constant ErrInvalidProducerIDMapping (line 219) | ErrInvalidProducerIDMapping           KError = 49
  constant ErrInvalidTransactionTimeout (line 220) | ErrInvalidTransactionTimeout          KError = 50
  constant ErrConcurrentTransactions (line 221) | ErrConcurrentTransactions             KError = 51
  constant ErrTransactionCoordinatorFenced (line 222) | ErrTransactionCoordinatorFenced       KError = 52
  constant ErrTransactionalIDAuthorizationFailed (line 223) | ErrTransactionalIDAuthorizationFailed KError = 53
  constant ErrSecurityDisabled (line 224) | ErrSecurityDisabled                   KError = 54
  constant ErrOperationNotAttempted (line 225) | ErrOperationNotAttempted              KError = 55
  constant ErrKafkaStorageError (line 226) | ErrKafkaStorageError                  KError = 56
  constant ErrLogDirNotFound (line 227) | ErrLogDirNotFound                     KError = 57
  constant ErrSASLAuthenticationFailed (line 228) | ErrSASLAuthenticationFailed           KError = 58
  constant ErrUnknownProducerID (line 229) | ErrUnknownProducerID                  KError = 59
  constant ErrReassignmentInProgress (line 230) | ErrReassignmentInProgress             KError = 60
  constant ErrDelegationTokenAuthDisabled (line 231) | ErrDelegationTokenAuthDisabled        KError = 61
  constant ErrDelegationTokenNotFound (line 232) | ErrDelegationTokenNotFound            KError = 62
  constant ErrDelegationTokenOwnerMismatch (line 233) | ErrDelegationTokenOwnerMismatch       KError = 63
  constant ErrDelegationTokenRequestNotAllowed (line 234) | ErrDelegationTokenRequestNotAllowed   KError = 64
  constant ErrDelegationTokenAuthorizationFailed (line 235) | ErrDelegationTokenAuthorizationFailed KError = 65
  constant ErrDelegationTokenExpired (line 236) | ErrDelegationTokenExpired             KError = 66
  constant ErrInvalidPrincipalType (line 237) | ErrInvalidPrincipalType               KError = 67
  constant ErrNonEmptyGroup (line 238) | ErrNonEmptyGroup                      KError = 68
  constant ErrGroupIDNotFound (line 239) | ErrGroupIDNotFound                    KError = 69
  constant ErrFetchSessionIDNotFound (line 240) | ErrFetchSessionIDNotFound             KError = 70
  constant ErrInvalidFetchSessionEpoch (line 241) | ErrInvalidFetchSessionEpoch           KError = 71
  constant ErrListenerNotFound (line 242) | ErrListenerNotFound                   KError = 72
  constant ErrTopicDeletionDisabled (line 243) | ErrTopicDeletionDisabled              KError = 73
  constant ErrFencedLeaderEpoch (line 244) | ErrFencedLeaderEpoch                  KError = 74
  constant ErrUnknownLeaderEpoch (line 245) | ErrUnknownLeaderEpoch                 KError = 75
  constant ErrUnsupportedCompressionType (line 246) | ErrUnsupportedCompressionType         KError = 76
  constant ErrStaleBrokerEpoch (line 247) | ErrStaleBrokerEpoch                   KError = 77
  constant ErrOffsetNotAvailable (line 248) | ErrOffsetNotAvailable                 KError = 78
  constant ErrMemberIdRequired (line 249) | ErrMemberIdRequired                   KError = 79
  constant ErrPreferredLeaderNotAvailable (line 250) | ErrPreferredLeaderNotAvailable        KError = 80
  constant ErrGroupMaxSizeReached (line 251) | ErrGroupMaxSizeReached                KError = 81
  constant ErrFencedInstancedId (line 252) | ErrFencedInstancedId                  KError = 82
  constant ErrEligibleLeadersNotAvailable (line 253) | ErrEligibleLeadersNotAvailable        KError = 83
  constant ErrElectionNotNeeded (line 254) | ErrElectionNotNeeded                  KError = 84
  constant ErrNoReassignmentInProgress (line 255) | ErrNoReassignmentInProgress           KError = 85
  constant ErrGroupSubscribedToTopic (line 256) | ErrGroupSubscribedToTopic             KError = 86
  constant ErrInvalidRecord (line 257) | ErrInvalidRecord                      KError = 87
  constant ErrUnstableOffsetCommit (line 258) | ErrUnstableOffsetCommit               KError = 88
  constant ErrThrottlingQuotaExceeded (line 259) | ErrThrottlingQuotaExceeded            KError = 89
  constant ErrProducerFenced (line 260) | ErrProducerFenced                     KError = 90

FILE: errors_test.go
  function TestSentinelWithSingleWrappedError (line 12) | func TestSentinelWithSingleWrappedError(t *testing.T) {
  function TestSentinelWithMultipleWrappedErrors (line 44) | func TestSentinelWithMultipleWrappedErrors(t *testing.T) {

FILE: examples/consumergroup/main.go
  function init (line 29) | func init() {
  function main (line 52) | func main() {
  function toggleConsumptionFlow (line 151) | func toggleConsumptionFlow(client sarama.ConsumerGroup, isPaused *bool) {
  type Consumer (line 164) | type Consumer struct
    method Setup (line 169) | func (consumer *Consumer) Setup(sarama.ConsumerGroupSession) error {
    method Cleanup (line 176) | func (consumer *Consumer) Cleanup(sarama.ConsumerGroupSession) error {
    method ConsumeClaim (line 183) | func (consumer *Consumer) ConsumeClaim(session sarama.ConsumerGroupSes...

FILE: examples/interceptors/main.go
  function main (line 25) | func main() {

FILE: examples/interceptors/trace_interceptor.go
  type OTelInterceptor (line 14) | type OTelInterceptor struct
    method OnSend (line 62) | func (oi *OTelInterceptor) OnSend(msg *sarama.ProducerMessage) {
  function NewOTelInterceptor (line 21) | func NewOTelInterceptor(brokers []string) *OTelInterceptor {
  constant MessageIDHeaderName (line 38) | MessageIDHeaderName = "message_id"
  constant SpanHeaderName (line 39) | SpanHeaderName      = "span_id"
  constant TraceHeaderName (line 40) | TraceHeaderName     = "trace_id"
  function shouldIgnoreMsg (line 43) | func shouldIgnoreMsg(msg *sarama.ProducerMessage) bool {

FILE: fetch_request.go
  type fetchRequestBlock (line 5) | type fetchRequestBlock struct
    method encode (line 20) | func (b *fetchRequestBlock) encode(pe packetEncoder, version int16) er...
    method decode (line 33) | func (b *fetchRequestBlock) decode(pd packetDecoder, version int16) (e...
  type FetchRequest (line 57) | type FetchRequest struct
    method setVersion (line 92) | func (r *FetchRequest) setVersion(v int16) {
    method encode (line 103) | func (r *FetchRequest) encode(pe packetEncoder) (err error) {
    method decode (line 170) | func (r *FetchRequest) decode(pd packetDecoder, version int16) (err er...
    method key (line 275) | func (r *FetchRequest) key() int16 {
    method version (line 279) | func (r *FetchRequest) version() int16 {
    method headerVersion (line 283) | func (r *FetchRequest) headerVersion() int16 {
    method isValidVersion (line 287) | func (r *FetchRequest) isValidVersion() bool {
    method requiredVersion (line 291) | func (r *FetchRequest) requiredVersion() KafkaVersion {
    method AddBlock (line 318) | func (r *FetchRequest) AddBlock(topic string, partitionID int32, fetch...
  type IsolationLevel (line 96) | type IsolationLevel
  constant ReadUncommitted (line 99) | ReadUncommitted IsolationLevel = iota
  constant ReadCommitted (line 100) | ReadCommitted

FILE: fetch_request_test.go
  function TestFetchRequest (line 55) | func TestFetchRequest(t *testing.T) {

FILE: fetch_response.go
  constant invalidLeaderEpoch (line 12) | invalidLeaderEpoch        = -1
  constant invalidPreferredReplicaID (line 13) | invalidPreferredReplicaID = -1
  type AbortedTransaction (line 16) | type AbortedTransaction struct
    method decode (line 23) | func (t *AbortedTransaction) decode(pd packetDecoder) (err error) {
    method encode (line 35) | func (t *AbortedTransaction) encode(pe packetEncoder) (err error) {
  type FetchResponseBlock (line 42) | type FetchResponseBlock struct
    method decode (line 70) | func (b *FetchResponseBlock) decode(pd packetDecoder, version int16) (...
    method numRecords (line 191) | func (b *FetchResponseBlock) numRecords() (int, error) {
    method isPartial (line 206) | func (b *FetchResponseBlock) isPartial() (bool, error) {
    method encode (line 218) | func (b *FetchResponseBlock) encode(pe packetEncoder, version int16) (...
    method getAbortedTransactions (line 254) | func (b *FetchResponseBlock) getAbortedTransactions() []*AbortedTransa...
  type FetchResponse (line 265) | type FetchResponse struct
    method setVersion (line 283) | func (r *FetchResponse) setVersion(v int16) {
    method decode (line 287) | func (r *FetchResponse) decode(pd packetDecoder, version int16) (err e...
    method encode (line 344) | func (r *FetchResponse) encode(pe packetEncoder) (err error) {
    method key (line 381) | func (r *FetchResponse) key() int16 {
    method version (line 385) | func (r *FetchResponse) version() int16 {
    method headerVersion (line 389) | func (r *FetchResponse) headerVersion() int16 {
    method isValidVersion (line 393) | func (r *FetchResponse) isValidVersion() bool {
    method requiredVersion (line 397) | func (r *FetchResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 424) | func (r *FetchResponse) throttleTime() time.Duration {
    method GetBlock (line 428) | func (r *FetchResponse) GetBlock(topic string, partition int32) *Fetch...
    method AddError (line 440) | func (r *FetchResponse) AddError(topic string, partition int32, err KE...
    method getOrCreateBlock (line 457) | func (r *FetchResponse) getOrCreateBlock(topic string, partition int32...
    method AddMessageWithTimestamp (line 488) | func (r *FetchResponse) AddMessageWithTimestamp(topic string, partitio...
    method AddRecordWithTimestamp (line 504) | func (r *FetchResponse) AddRecordWithTimestamp(topic string, partition...
    method AddRecordBatchWithTimestamp (line 519) | func (r *FetchResponse) AddRecordBatchWithTimestamp(topic string, part...
    method AddControlRecordWithTimestamp (line 541) | func (r *FetchResponse) AddControlRecordWithTimestamp(topic string, pa...
    method AddMessage (line 575) | func (r *FetchResponse) AddMessage(topic string, partition int32, key,...
    method AddRecord (line 579) | func (r *FetchResponse) AddRecord(topic string, partition int32, key, ...
    method AddRecordBatch (line 583) | func (r *FetchResponse) AddRecordBatch(topic string, partition int32, ...
    method AddControlRecord (line 587) | func (r *FetchResponse) AddControlRecord(topic string, partition int32...
    method SetLastOffsetDelta (line 592) | func (r *FetchResponse) SetLastOffsetDelta(topic string, partition int...
    method SetLastStableOffset (line 602) | func (r *FetchResponse) SetLastStableOffset(topic string, partition in...
  function encodeKV (line 475) | func encodeKV(key, value Encoder) ([]byte, []byte) {

FILE: fetch_response_test.go
  function TestEmptyFetchResponse (line 207) | func TestEmptyFetchResponse(t *testing.T) {
  function TestOneMessageFetchResponse (line 216) | func TestOneMessageFetchResponse(t *testing.T) {
  function TestOverflowMessageFetchResponse (line 272) | func TestOverflowMessageFetchResponse(t *testing.T) {
  function TestOneRecordFetchResponse (line 332) | func TestOneRecordFetchResponse(t *testing.T) {
  function TestPartailFetchResponse (line 381) | func TestPartailFetchResponse(t *testing.T) {
  function TestEmptyRecordsFetchResponse (line 423) | func TestEmptyRecordsFetchResponse(t *testing.T) {
  function TestOneMessageFetchResponseV4 (line 468) | func TestOneMessageFetchResponseV4(t *testing.T) {
  function TestPreferredReplicaFetchResponseV11 (line 524) | func TestPreferredReplicaFetchResponseV11(t *testing.T) {

FILE: find_coordinator_request.go
  type CoordinatorType (line 3) | type CoordinatorType
  constant CoordinatorGroup (line 6) | CoordinatorGroup CoordinatorType = iota
  constant CoordinatorTransaction (line 7) | CoordinatorTransaction
  type FindCoordinatorRequest (line 10) | type FindCoordinatorRequest struct
    method setVersion (line 16) | func (f *FindCoordinatorRequest) setVersion(v int16) {
    method encode (line 20) | func (f *FindCoordinatorRequest) encode(pe packetEncoder) error {
    method decode (line 32) | func (f *FindCoordinatorRequest) decode(pd packetDecoder, version int1...
    method key (line 50) | func (f *FindCoordinatorRequest) key() int16 {
    method version (line 54) | func (f *FindCoordinatorRequest) version() int16 {
    method headerVersion (line 58) | func (r *FindCoordinatorRequest) headerVersion() int16 {
    method isValidVersion (line 62) | func (f *FindCoordinatorRequest) isValidVersion() bool {
    method requiredVersion (line 66) | func (f *FindCoordinatorRequest) requiredVersion() KafkaVersion {

FILE: find_coordinator_request_test.go
  function TestFindCoordinatorRequest (line 19) | func TestFindCoordinatorRequest(t *testing.T) {

FILE: find_coordinator_response.go
  type FindCoordinatorResponse (line 9) | type FindCoordinatorResponse struct
    method setVersion (line 17) | func (f *FindCoordinatorResponse) setVersion(v int16) {
    method decode (line 21) | func (f *FindCoordinatorResponse) decode(pd packetDecoder, version int...
    method encode (line 55) | func (f *FindCoordinatorResponse) encode(pe packetEncoder) error {
    method key (line 78) | func (f *FindCoordinatorResponse) key() int16 {
    method version (line 82) | func (f *FindCoordinatorResponse) version() int16 {
    method headerVersion (line 86) | func (r *FindCoordinatorResponse) headerVersion() int16 {
    method isValidVersion (line 90) | func (f *FindCoordinatorResponse) isValidVersion() bool {
    method requiredVersion (line 94) | func (f *FindCoordinatorResponse) requiredVersion() KafkaVersion {
    method throttleTime (line 105) | func (r *FindCoordinatorResponse) throttleTime() time.Duration {

FILE: find_coordinator_response_test.go
  function TestFindCoordinatorResponse (line 10) | func TestFindCoordinatorResponse(t *testing.T) {

FILE: functional_admin_test.go
  function TestFuncAdminQuotas (line 19) | func TestFuncAdminQuotas(t *testing.T) {
  function TestFuncAdminDescribeGroups (line 149) | func TestFuncAdminDescribeGroups(t *testing.T) {
  function TestFuncAdminListConsumerGroups (line 206) | func TestFuncAdminListConsumerGroups(t *testing.T) {
  function TestFuncAdminListConsumerGroupOffsets (line 248) | func TestFuncAdminListConsumerGroupOffsets(t *testing.T) {
  function TestFuncAdminDescribeLogDirs (line 321) | func TestFuncAdminDescribeLogDirs(t *testing.T) {
  function TestFuncAdminDeleteGroup (line 363) | func TestFuncAdminDeleteGroup(t *testing.T) {
  function TestFuncAdminDeleteTopic (line 413) | func TestFuncAdminDeleteTopic(t *testing.T) {
  function TestFuncAdminElectLeadersV1 (line 438) | func TestFuncAdminElectLeadersV1(t *testing.T) {
  function TestFuncAdminIncrementalAlterConfigs (line 480) | func TestFuncAdminIncrementalAlterConfigs(t *testing.T) {

FILE: functional_client_test.go
  function TestFuncConnectionFailure (line 12) | func TestFuncConnectionFailure(t *testing.T) {
  function TestFuncAdminNetworkErrorClosesControllerConnection (line 29) | func TestFuncAdminNetworkErrorClosesControllerConnection(t *testing.T) {
  function TestFuncClientMetadata (line 84) | func TestFuncClientMetadata(t *testing.T) {
  function TestFuncClientCoordinator (line 127) | func TestFuncClientCoordinator(t *testing.T) {

FILE: functional_consumer_follower_fetch_test.go
  function TestConsumerFetchFollowerFailover (line 14) | func TestConsumerFetchFollowerFailover(t *testing.T) {

FILE: functional_consumer_group_test.go
  function TestFuncConsumerGroupPartitioning (line 20) | func TestFuncConsumerGroupPartitioning(t *testing.T) {
  function TestFuncConsumerGroupPartitioningStateful (line 54) | func TestFuncConsumerGroupPartitioningStateful(t *testing.T) {
  function TestFuncConsumerGroupExcessConsumers (line 99) | func TestFuncConsumerGroupExcessConsumers(t *testing.T) {
  function TestFuncConsumerGroupRebalanceAfterAddingPartitions (line 139) | func TestFuncConsumerGroupRebalanceAfterAddingPartitions(t *testing.T) {
  function TestFuncConsumerGroupFuzzy (line 183) | func TestFuncConsumerGroupFuzzy(t *testing.T) {
  function TestFuncConsumerGroupOffsetDeletion (line 239) | func TestFuncConsumerGroupOffsetDeletion(t *testing.T) {
  function testFuncConsumerGroupID (line 298) | func testFuncConsumerGroupID(t *testing.T) string {
  function markOffset (line 302) | func markOffset(t *testing.T, offsetMgr OffsetManager, topic string, par...
  function testFuncConsumerGroupFuzzySeed (line 311) | func testFuncConsumerGroupFuzzySeed(topic string) error {
  type testFuncConsumerGroupMessage (line 344) | type testFuncConsumerGroupMessage struct
  type testFuncConsumerGroupSink (line 349) | type testFuncConsumerGroupSink struct
    method Len (line 354) | func (s *testFuncConsumerGroupSink) Len() int {
    method Push (line 361) | func (s *testFuncConsumerGroupSink) Push(clientID string, m *ConsumerM...
    method Close (line 368) | func (s *testFuncConsumerGroupSink) Close() map[string][]string {
  type testFuncConsumerGroupMember (line 379) | type testFuncConsumerGroupMember struct
    method AssertCleanShutdown (line 456) | func (m *testFuncConsumerGroupMember) AssertCleanShutdown() {
    method AssertNoErrs (line 467) | func (m *testFuncConsumerGroupMember) AssertNoErrs() {
    method WaitForState (line 480) | func (m *testFuncConsumerGroupMember) WaitForState(expected int32) {
    method WaitForHandlers (line 488) | func (m *testFuncConsumerGroupMember) WaitForHandlers(expected int) {
    method WaitForClaims (line 496) | func (m *testFuncConsumerGroupMember) WaitForClaims(expected map[strin...
    method Stop (line 507) | func (m *testFuncConsumerGroupMember) Stop() { _ = m.Close() }
    method Setup (line 509) | func (m *testFuncConsumerGroupMember) Setup(s ConsumerGroupSession) er...
    method Cleanup (line 529) | func (m *testFuncConsumerGroupMember) Cleanup(s ConsumerGroupSession) ...
    method ConsumeClaim (line 536) | func (m *testFuncConsumerGroupMember) ConsumeClaim(s ConsumerGroupSess...
    method waitFor (line 567) | func (m *testFuncConsumerGroupMember) waitFor(kind string, expected in...
    method loop (line 596) | func (m *testFuncConsumerGroupMember) loop(topics []string) {
  function defaultConfig (line 396) | func defaultConfig(clientID string) *Config {
  function runTestFuncConsumerGroupMember (line 409) | func runTestFuncConsumerGroupMember(
  function runTestFuncConsumerGroupMemberWithConfig (line 423) | func runTestFuncConsumerGroupMemberWithConfig(
  function newTestStatefulStrategy (line 645) | func newTestStatefulStrategy(t *testing.T) *testStatefulStrategy {
  type testStatefulStrategy (line 652) | type testStatefulStrategy struct
    method Name (line 659) | func (h *testStatefulStrategy) Name() string {
    method Plan (line 663) | func (h *testStatefulStrategy) Plan(members map[string]ConsumerGroupMe...
    method AssignmentData (line 675) | func (h *testStatefulStrategy) AssignmentData(memberID string, topics ...
    method AssertInitialValues (line 682) | func (h *testStatefulStrategy) AssertInitialValues(count int32) {
    method AssertNoInitialValues (line 690) | func (h *testStatefulStrategy) AssertNoInitialValues() {

FILE: functional_consumer_staticmembership_test.go
  function TestFuncConsumerGroupStaticMembership_Basic (line 13) | func TestFuncConsumerGroupStaticMembership_Basic(t *testing.T) {
  function TestFuncConsumerGroupStaticMembership_RejoinAndLeave (line 67) | func TestFuncConsumerGroupStaticMembership_RejoinAndLeave(t *testing.T) {
  function TestFuncConsumerGroupStaticMembership_Fenced (line 167) | func TestFuncConsumerGroupStaticMembership_Fenced(t *testing.T) {
  function testFuncConsumerGroupProduceMessage (line 216) | func testFuncConsumerGroupProduceMessage(topic string, count int) error {

FILE: functional_consumer_test.go
  function TestFuncConsumerOffsetOutOfRange (line 24) | func TestFuncConsumerOffsetOutOfRange(t *testing.T) {
  function TestConsumerHighWaterMarkOffset (line 44) | func TestConsumerHighWaterMarkOffset(t *testing.T) {
  function TestVersionMatrix (line 90) | func TestVersionMatrix(t *testing.T) {
  function TestVersionMatrixLZ4 (line 111) | func TestVersionMatrixLZ4(t *testing.T) {
  function TestVersionMatrixZstd (line 131) | func TestVersionMatrixZstd(t *testing.T) {
  function TestVersionMatrixIdempotent (line 150) | func TestVersionMatrixIdempotent(t *testing.T) {
  function TestReadOnlyAndAllCommittedMessages (line 167) | func TestReadOnlyAndAllCommittedMessages(t *testing.T) {
  function TestConsumerGroupDeadlock (line 310) | func TestConsumerGroupDeadlock(t *testing.T) {
  function prodMsg2Str (line 434) | func prodMsg2Str(prodMsg *ProducerMessage) string {
  function consMsg2Str (line 438) | func consMsg2Str(consMsg *ConsumerMessage) string {
  function versionRange (line 442) | func versionRange(lower KafkaVersion) []KafkaVersion {
  function produceMsgs (line 470) | func produceMsgs(t *testing.T, clientVersions []KafkaVersion, codecs []C...
  function consumeMsgs (line 548) | func consumeMsgs(t *testing.T, clientVersions []KafkaVersion, producedMe...

FILE: functional_java_interop_test.go
  constant brokerContainer (line 19) | brokerContainer = "kafka-1"
  constant brokerAddr (line 20) | brokerAddr      = "kafka-1:9091"
  constant zookeeperAddr (line 21) | zookeeperAddr   = "zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181"
  function produceWithJava (line 35) | func produceWithJava(t *testing.T, topic string, codec CompressionCodec,...
  function consumeWithSarama (line 85) | func consumeWithSarama(t *testing.T, topic string, startOffset int64, co...
  function produceWithSarama (line 114) | func produceWithSarama(t *testing.T, topic string, codec CompressionCode...
  function consumeWithJava (line 1
Condensed preview — 339 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,380K chars).
[
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 853,
    "preview": "---\nname: Bug report\nabout: Report an issue that you've found\ntitle: \"\"\nlabels: \"\"\nassignees: \"\"\n---\n\n##### Description\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 518,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: \"\"\nlabels: \"\"\nassignees: \"\"\n---\n\n#### Descripti"
  },
  {
    "path": ".github/actions/staticcheck-matchers.json",
    "chars": 270,
    "preview": "{\n  \"problemMatcher\": [\n    {\n      \"owner\": \"staticcheck\",\n      \"pattern\": [\n        {\n          \"regexp\": \"^\\\\s*(.+\\\\"
  },
  {
    "path": ".github/dependabot.yml",
    "chars": 1309,
    "preview": "version: 2\nupdates:\n  - package-ecosystem: docker\n    directory: /\n    schedule:\n      interval: daily\n      time: \"21:0"
  },
  {
    "path": ".github/release.yaml",
    "chars": 732,
    "preview": "changelog:\n  exclude:\n    labels:\n    - ignore-for-release\n    - invalid\n    - no-changelog\n    - skip-changelog\n  categ"
  },
  {
    "path": ".github/renovate.json5",
    "chars": 2809,
    "preview": "{\n  $schema: \"https://docs.renovatebot.com/renovate-schema.json\",\n  extends: [\n    \"config:best-practices\",\n    \"customM"
  },
  {
    "path": ".github/workflows/apidiff.yml",
    "chars": 1508,
    "preview": "name: API Compatibility\non:\n  merge_group:\n  push:\n    branches:\n    - main\n    paths-ignore:\n    - '**/*.md'\n  pull_req"
  },
  {
    "path": ".github/workflows/cache-cleanup.yml",
    "chars": 1095,
    "preview": "# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up"
  },
  {
    "path": ".github/workflows/ci.yml",
    "chars": 3083,
    "preview": "name: CI\non:\n  merge_group:\n  push:\n    branches:\n    - main\n    paths-ignore:\n    - '**/*.md'\n  pull_request:\n    branc"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "chars": 1515,
    "preview": "name: \"CodeQL\"\non:\n  merge_group:\n  push:\n    branches:\n    - main\n  pull_request:\n    branches:\n    - \"**\"\n  schedule:\n"
  },
  {
    "path": ".github/workflows/dependency-review.yml",
    "chars": 1082,
    "preview": "# Dependency Review Action\n#\n# This Action will scan dependency manifest files that change as part of a Pull Request,\n# "
  },
  {
    "path": ".github/workflows/fuzz.yml",
    "chars": 949,
    "preview": "name: Fuzzing\non:\n  merge_group:\n  push:\n    branches:\n    - main\n    paths-ignore:\n    - '**/*.md'\n  pull_request:\n    "
  },
  {
    "path": ".github/workflows/fvt-main.yml",
    "chars": 1440,
    "preview": "name: FVT (main)\non:\n  merge_group:\n  push:\n    branches:\n    - main\n    paths-ignore:\n    - '**/*.md'\n\npermissions:\n  c"
  },
  {
    "path": ".github/workflows/fvt-pr.yml",
    "chars": 1023,
    "preview": "name: FVT (PR)\non:\n  pull_request:\n    branches:\n    - \"**\"\n    paths-ignore:\n    - '**/*.md'\n\npermissions:\n  contents: "
  },
  {
    "path": ".github/workflows/fvt.yml",
    "chars": 3571,
    "preview": "name: FVT\non:\n  workflow_call:\n    inputs:\n      go-version:\n        required: false\n        type: string\n        defaul"
  },
  {
    "path": ".github/workflows/i386.yml",
    "chars": 1242,
    "preview": "name: i386\non:\n  merge_group:\n  push:\n    branches:\n    - main\n    paths-ignore:\n    - '**/*.md'\n  pull_request:\n    bra"
  },
  {
    "path": ".github/workflows/renovate-config.yml",
    "chars": 542,
    "preview": "name: renovate-config-validator\n\non:\n  pull_request:\n    paths:\n      - '.github/renovate.json5'\n\npermissions:\n  content"
  },
  {
    "path": ".github/workflows/scorecard.yml",
    "chars": 3008,
    "preview": "name: Scorecard supply-chain security\non:\n  # For Branch-Protection check. Only the default branch is supported. See\n  #"
  },
  {
    "path": ".github/workflows/stale.yml",
    "chars": 1876,
    "preview": "# configuration for https://github.com/actions/stale\nname: \"Stale issues and PRs\"\non:\n  schedule:\n  - cron: \"0 */2 * * *"
  },
  {
    "path": ".gitignore",
    "chars": 321,
    "preview": "# Compiled Object files, Static and Dynamic libs (Shared Objects)\n*.o\n*.a\n*.so\n*.test\n\n# Folders\n_obj\n_test\n.vagrant\n\n# "
  },
  {
    "path": ".golangci.yml",
    "chars": 2057,
    "preview": "# yaml-language-server: $schema=https://golangci-lint.run/jsonschema/golangci.jsonschema.json\nversion: \"2\"\nlinters:\n  de"
  },
  {
    "path": ".pre-commit-config.yaml",
    "chars": 1302,
    "preview": "fail_fast: false\ndefault_install_hook_types: [pre-commit, commit-msg]\nrepos:\n  - repo: https://github.com/pre-commit/pre"
  },
  {
    "path": ".whitesource",
    "chars": 65,
    "preview": "{\n  \"settingsInheritedFrom\": \"ibm-mend-config/mend-config@main\"\n}"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 92730,
    "preview": "# Changelog\n\n## Version 1.42.2 (2024-02-09)\n\n## What's Changed\n\n⚠️ The go.mod directive has been bumped to 1.18 as the m"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 5226,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nWe as members, contributors, and leaders pledge to make participa"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 5791,
    "preview": "# Contributing\n\n[fork]: https://github.com/IBM/sarama/fork\n[pr]: https://github.com/IBM/sarama/compare\n[released]: https"
  },
  {
    "path": "Dockerfile.kafka",
    "chars": 2548,
    "preview": "FROM registry.access.redhat.com/ubi9/ubi-minimal:9.7@sha256:83006d535923fcf1345067873524a3980316f51794f01d8655be55d6e938"
  },
  {
    "path": "LICENSE.md",
    "chars": 1102,
    "preview": "# MIT License\n\nCopyright (c) 2013 Shopify\n\nCopyright (c) 2023 IBM Corporation\n\nPermission is hereby granted, free of cha"
  },
  {
    "path": "Makefile",
    "chars": 1698,
    "preview": "default: fmt get update test lint\n\nGO       := go\nGOBIN    := $(shell pwd)/bin\nGOBUILD  := CGO_ENABLED=0 $(GO) build $(B"
  },
  {
    "path": "README.md",
    "chars": 2068,
    "preview": "# sarama\n\n[![Go Reference](https://pkg.go.dev/badge/github.com/IBM/sarama.svg)](https://pkg.go.dev/github.com/IBM/sarama"
  },
  {
    "path": "SECURITY.md",
    "chars": 752,
    "preview": "# Security\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.*"
  },
  {
    "path": "Vagrantfile",
    "chars": 354,
    "preview": "# We have 5 * 192MB ZK processes and 5 * 320MB Kafka processes => 2560MB\nMEMORY = 3072\n\nVagrant.configure(\"2\") do |confi"
  },
  {
    "path": "acl_bindings.go",
    "chars": 2740,
    "preview": "package sarama\n\n// Resource holds information about acl resource type\ntype Resource struct {\n\tResourceType        AclRes"
  },
  {
    "path": "acl_create_request.go",
    "chars": 1866,
    "preview": "package sarama\n\n// CreateAclsRequest is an acl creation request\ntype CreateAclsRequest struct {\n\tVersion      int16\n\tAcl"
  },
  {
    "path": "acl_create_request_test.go",
    "chars": 1514,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\taclCreateRequest = []byte{\n\t\t0, 0, 0, 1,\n\t\t3, // resour"
  },
  {
    "path": "acl_create_response.go",
    "chars": 2180,
    "preview": "package sarama\n\nimport \"time\"\n\n// CreateAclsResponse is a an acl response creation type\ntype CreateAclsResponse struct {"
  },
  {
    "path": "acl_create_response_test.go",
    "chars": 785,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tcreateResponseWithError = []byte{\n\t\t0, 0, "
  },
  {
    "path": "acl_delete_request.go",
    "chars": 1334,
    "preview": "package sarama\n\n// DeleteAclsRequest is a delete acl request\ntype DeleteAclsRequest struct {\n\tVersion int\n\tFilters []*Ac"
  },
  {
    "path": "acl_delete_request_test.go",
    "chars": 2456,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\taclDeleteRequestNullsv1 = []byte{\n\t\t0, 0, 0, 1,\n\t\t1,\n\t\t"
  },
  {
    "path": "acl_delete_response.go",
    "chars": 3400,
    "preview": "package sarama\n\nimport \"time\"\n\n// DeleteAclsResponse is a delete acl response\ntype DeleteAclsResponse struct {\n\tVersion "
  },
  {
    "path": "acl_delete_response_test.go",
    "chars": 861,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar deleteAclsResponse = []byte{\n\t0, 0, 0, 100,\n\t"
  },
  {
    "path": "acl_describe_request.go",
    "chars": 984,
    "preview": "package sarama\n\n// DescribeAclsRequest is a describe acl request type\ntype DescribeAclsRequest struct {\n\tVersion int\n\tAc"
  },
  {
    "path": "acl_describe_request_test.go",
    "chars": 1517,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\taclDescribeRequest = []byte{\n\t\t2, // resource type"
  },
  {
    "path": "acl_describe_response.go",
    "chars": 1886,
    "preview": "package sarama\n\nimport \"time\"\n\n// DescribeAclsResponse is a describe acl response type\ntype DescribeAclsResponse struct "
  },
  {
    "path": "acl_describe_response_test.go",
    "chars": 961,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar aclDescribeResponseError = []byte{\n\t0, 0, 0, "
  },
  {
    "path": "acl_filter.go",
    "chars": 1645,
    "preview": "package sarama\n\ntype AclFilter struct {\n\tVersion                   int\n\tResourceType              AclResourceType\n\tResou"
  },
  {
    "path": "acl_types.go",
    "chars": 6761,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\t\"strings\"\n)\n\ntype (\n\tAclOperation int\n\n\tAclPermissionType int\n\n\tAclResourceType int\n\n\tA"
  },
  {
    "path": "acl_types_test.go",
    "chars": 1840,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nfunc TestAclOperationTextMarshal(t *testing.T) {\n\tfor i :"
  },
  {
    "path": "add_offsets_to_txn_request.go",
    "chars": 1495,
    "preview": "package sarama\n\n// AddOffsetsToTxnRequest adds offsets to a transaction request\ntype AddOffsetsToTxnRequest struct {\n\tVe"
  },
  {
    "path": "add_offsets_to_txn_request_test.go",
    "chars": 435,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar addOffsetsToTxnRequest = []byte{\n\t0, 3, 't', 'x', 'n',\n\t0,"
  },
  {
    "path": "add_offsets_to_txn_response.go",
    "chars": 1292,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\n// AddOffsetsToTxnResponse is a response type for adding offsets to txns\ntype AddOff"
  },
  {
    "path": "add_offsets_to_txn_response_test.go",
    "chars": 358,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar addOffsetsToTxnResponse = []byte{\n\t0, 0, 0, 1"
  },
  {
    "path": "add_partitions_to_txn_request.go",
    "chars": 1971,
    "preview": "package sarama\n\n// AddPartitionsToTxnRequest is a add partition request\ntype AddPartitionsToTxnRequest struct {\n\tVersion"
  },
  {
    "path": "add_partitions_to_txn_request_test.go",
    "chars": 548,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar addPartitionsToTxnRequest = []byte{\n\t0, 3, 't', 'x', 'n',\n"
  },
  {
    "path": "add_partitions_to_txn_response.go",
    "chars": 2562,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\n// AddPartitionsToTxnResponse is a partition errors to transaction type\ntype AddPart"
  },
  {
    "path": "add_partitions_to_txn_response_test.go",
    "chars": 565,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar addPartitionsToTxnResponse = []byte{\n\t0, 0, 0"
  },
  {
    "path": "admin.go",
    "chars": 41543,
    "preview": "package sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"maps\"\n\t\"math/rand\"\n\t\"net\"\n\t\"strconv\"\n\t\"sync\"\n\t\"time\"\n)\n\n// ClusterAdmi"
  },
  {
    "path": "admin_test.go",
    "chars": 51856,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"strings\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestClusterAdmin(t *tes"
  },
  {
    "path": "alter_client_quotas_request.go",
    "chars": 4264,
    "preview": "package sarama\n\n// AlterClientQuotas Request (Version: 0) => [entries] validate_only\n//   entries => [entity] [ops]\n//  "
  },
  {
    "path": "alter_client_quotas_request_test.go",
    "chars": 4726,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\talterClientQuotasRequestSingleOp = []byte{\n\t\t0, 0, 0, 1"
  },
  {
    "path": "alter_client_quotas_response.go",
    "chars": 3594,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\n// AlterClientQuotas Response (Version: 0) => throttle_time_ms [entries]\n//   thrott"
  },
  {
    "path": "alter_client_quotas_response_test.go",
    "chars": 2896,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\talterClientQuotasResponseError = []byte{\n\t\t0, 0, 0, 0, "
  },
  {
    "path": "alter_configs_request.go",
    "chars": 2728,
    "preview": "package sarama\n\n// AlterConfigsRequest is an alter config request type\ntype AlterConfigsRequest struct {\n\tVersion      i"
  },
  {
    "path": "alter_configs_request_test.go",
    "chars": 1911,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyAlterConfigsRequest = []byte{\n\t\t0, 0, 0, 0, // 0 c"
  },
  {
    "path": "alter_configs_response.go",
    "chars": 2905,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\n// AlterConfigsResponse is a response type for alter config\ntype AlterConfigs"
  },
  {
    "path": "alter_configs_response_test.go",
    "chars": 897,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\talterResponseEmpty = []byte{\n\t\t0, 0, 0, 0, // thro"
  },
  {
    "path": "alter_partition_reassignments_request.go",
    "chars": 3461,
    "preview": "package sarama\n\ntype alterPartitionReassignmentsBlock struct {\n\treplicas []int32\n}\n\nfunc (b *alterPartitionReassignments"
  },
  {
    "path": "alter_partition_reassignments_request_test.go",
    "chars": 1658,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\talterPartitionReassignmentsRequestNoBlock = []byte{\n\t\t0"
  },
  {
    "path": "alter_partition_reassignments_response.go",
    "chars": 4258,
    "preview": "package sarama\n\nimport \"time\"\n\ntype alterPartitionReassignmentsErrorBlock struct {\n\terrorCode    KError\n\terrorMessage *s"
  },
  {
    "path": "alter_partition_reassignments_response_test.go",
    "chars": 1280,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\talterPartitionReassignmentsResponseNoError = []byte{\n\t\t"
  },
  {
    "path": "alter_user_scram_credentials_request.go",
    "chars": 3969,
    "preview": "package sarama\n\ntype AlterUserScramCredentialsRequest struct {\n\tVersion int16\n\n\t// Deletions represent list of SCRAM cre"
  },
  {
    "path": "alter_user_scram_credentials_request_test.go",
    "chars": 1835,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyAlterUserScramCredentialsRequest = []byte{\n\t\t1, //"
  },
  {
    "path": "alter_user_scram_credentials_response.go",
    "chars": 2438,
    "preview": "package sarama\n\nimport \"time\"\n\ntype AlterUserScramCredentialsResponse struct {\n\tVersion int16\n\n\tThrottleTime time.Durati"
  },
  {
    "path": "alter_user_scram_credentials_response_test.go",
    "chars": 1073,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\temptyAlterUserScramCredentialsResponse = ["
  },
  {
    "path": "api_versions.go",
    "chars": 3453,
    "preview": "package sarama\n\ntype apiVersionRange struct {\n\tminVersion int16\n\tmaxVersion int16\n}\n\ntype apiVersionMap map[int16]*apiVe"
  },
  {
    "path": "api_versions_request.go",
    "chars": 1820,
    "preview": "package sarama\n\nconst defaultClientSoftwareName = \"sarama\"\n\ntype ApiVersionsRequest struct {\n\t// Version defines the pro"
  },
  {
    "path": "api_versions_request_test.go",
    "chars": 586,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\tapiVersionRequest []byte\n\n\tapiVersionRequestV3 = []byte"
  },
  {
    "path": "api_versions_response.go",
    "chars": 3974,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\n// ApiVersionsResponseKey contains the APIs supported by the broker.\ntype ApiVersion"
  },
  {
    "path": "api_versions_response_test.go",
    "chars": 6091,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\n\tassert \"github.com/stretchr/testify/require\"\n)\n\nvar (\n\tapi"
  },
  {
    "path": "api_versions_test.go",
    "chars": 2750,
    "preview": "package sarama\n\nimport \"testing\"\n\nfunc TestRestrictApiVersionLowersVersionToBrokerMax(t *testing.T) {\n\trequest := NewMet"
  },
  {
    "path": "async_producer.go",
    "chars": 52049,
    "preview": "package sarama\n\nimport (\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/eapache/go-resiliency"
  },
  {
    "path": "async_producer_test.go",
    "chars": 94161,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"log\"\n\t\"math\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syn"
  },
  {
    "path": "balance_strategy.go",
    "chars": 45189,
    "preview": "package sarama\n\nimport (\n\t\"container/heap\"\n\t\"errors\"\n\t\"fmt\"\n\t\"maps\"\n\t\"math\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n)\n\nconst (\n\t// "
  },
  {
    "path": "balance_strategy_test.go",
    "chars": 74717,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"math\"\n\t\"math/rand\"\n\t\"reflect\"\n\t\"slices\"\n\t\"sort\"\n\t\"tes"
  },
  {
    "path": "broker.go",
    "chars": 58064,
    "preview": "package sarama\n\nimport (\n\t\"crypto/tls\"\n\t\"encoding/binary\"\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"math/rand\"\n\t\"net\"\n\t\"sort\"\n\t\"strconv\"\n"
  },
  {
    "path": "broker_test.go",
    "chars": 46627,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n\n\t\"githu"
  },
  {
    "path": "client.go",
    "chars": 41825,
    "preview": "package sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"math\"\n\t\"math/rand\"\n\t\"net\"\n\t\"slices\"\n\t\"sort\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/at"
  },
  {
    "path": "client_test.go",
    "chars": 39969,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"io\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"syscall\"\n\t\"testing\"\n\t\"t"
  },
  {
    "path": "client_tls_test.go",
    "chars": 6237,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"crypto/x509"
  },
  {
    "path": "compress.go",
    "chars": 3975,
    "preview": "package sarama\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/gzip\"\n\tsnappy \"github.com/klauspost/co"
  },
  {
    "path": "config.go",
    "chars": 41042,
    "preview": "package sarama\n\nimport (\n\t\"crypto/tls\"\n\t\"fmt\"\n\t\"io\"\n\t\"net\"\n\t\"regexp\"\n\t\"time\"\n\n\t\"github.com/klauspost/compress/gzip\"\n\t\"gi"
  },
  {
    "path": "config_resource_type.go",
    "chars": 599,
    "preview": "package sarama\n\n// ConfigResourceType is a type for resources that have configs.\ntype ConfigResourceType int8\n\n// Taken "
  },
  {
    "path": "config_test.go",
    "chars": 17256,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"strings\"\n\t\"testing\"\n\n\t\"github.com/rcrowley/go-"
  },
  {
    "path": "consumer.go",
    "chars": 36568,
    "preview": "package sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"sync\"\n\t\"sync/atomic\"\n\t\"time\"\n\n\t\"github.com/rcrowley/go-metrics\"\n)\n\n/"
  },
  {
    "path": "consumer_group.go",
    "chars": 35629,
    "preview": "package sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"sort\"\n\t\"sync\"\n\t\"time\"\n\n\t\"github.com/rcrowley/go-metrics\"\n)\n\n// Er"
  },
  {
    "path": "consumer_group_example_test.go",
    "chars": 1399,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"fmt\"\n)\n\ntype exampleConsumerGroupHandler struct{}\n\nfunc (e"
  },
  {
    "path": "consumer_group_members.go",
    "chars": 3856,
    "preview": "package sarama\n\nimport \"errors\"\n\n// ConsumerGroupMemberMetadata holds the metadata for consumer group\n// https://github."
  },
  {
    "path": "consumer_group_members_test.go",
    "chars": 3531,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nvar (\n\tgroupMemberMetadataV0 = []byte"
  },
  {
    "path": "consumer_group_test.go",
    "chars": 7122,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n\n\tassert \"github.com/st"
  },
  {
    "path": "consumer_metadata_request.go",
    "chars": 1207,
    "preview": "package sarama\n\n// ConsumerMetadataRequest is used for metadata requests\ntype ConsumerMetadataRequest struct {\n\tVersion "
  },
  {
    "path": "consumer_metadata_request_test.go",
    "chars": 657,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\tconsumerMetadataRequestEmpty = []byte{\n\t\t0x00, 0x0"
  },
  {
    "path": "consumer_metadata_response.go",
    "chars": 2158,
    "preview": "package sarama\n\nimport (\n\t\"net\"\n\t\"strconv\"\n)\n\n// ConsumerMetadataResponse holds the response for a consumer group meta d"
  },
  {
    "path": "consumer_metadata_response_test.go",
    "chars": 1215,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"testing\"\n)\n\nvar (\n\tconsumerMetadataResponseError = []byte{\n"
  },
  {
    "path": "consumer_test.go",
    "chars": 64907,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"reflect\"\n\t\"strconv\"\n\t\"sy"
  },
  {
    "path": "control_record.go",
    "chars": 1872,
    "preview": "package sarama\n\n// ControlRecordType ...\ntype ControlRecordType int\n\nconst (\n\t// ControlRecordAbort is a control record "
  },
  {
    "path": "control_record_test.go",
    "chars": 1755,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\tabortTxCtrlRecKey = []byte{\n\t\t0, 0, // version\n\t\t0"
  },
  {
    "path": "crc32_field.go",
    "chars": 1774,
    "preview": "package sarama\n\nimport (\n\t\"encoding/binary\"\n\t\"fmt\"\n\t\"hash/crc32\"\n\t\"sync\"\n)\n\ntype crcPolynomial int8\n\nconst (\n\tcrcIEEE cr"
  },
  {
    "path": "create_partitions_request.go",
    "chars": 2665,
    "preview": "package sarama\n\nimport \"time\"\n\ntype CreatePartitionsRequest struct {\n\tVersion         int16\n\tTopicPartitions map[string]"
  },
  {
    "path": "create_partitions_request_test.go",
    "chars": 1149,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tcreatePartitionRequestNoAssignment = []byt"
  },
  {
    "path": "create_partitions_response.go",
    "chars": 2545,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\ntype CreatePartitionsResponse struct {\n\tVersion              int16\n\tThrottleT"
  },
  {
    "path": "create_partitions_response_test.go",
    "chars": 2175,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"reflect\"\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tcreatePartitionRespon"
  },
  {
    "path": "create_topics_request.go",
    "chars": 5959,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\ntype CreateTopicsRequest struct {\n\t// Version defines the protocol version to use fo"
  },
  {
    "path": "create_topics_request_test.go",
    "chars": 1590,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tcreateTopicsRequestV0 = []byte{\n\t\t0, 0, 0,"
  },
  {
    "path": "create_topics_response.go",
    "chars": 7045,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\ntype CreateTopicsResponse struct {\n\t// Version defines the protocol version t"
  },
  {
    "path": "create_topics_response_test.go",
    "chars": 3183,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tcreateTopicsResponseV0 = []byte{"
  },
  {
    "path": "decompress.go",
    "chars": 2223,
    "preview": "package sarama\n\nimport (\n\t\"bytes\"\n\t\"fmt\"\n\t\"sync\"\n\n\t\"github.com/klauspost/compress/gzip\"\n\tsnappy \"github.com/klauspost/co"
  },
  {
    "path": "delete_groups_request.go",
    "chars": 1359,
    "preview": "package sarama\n\ntype DeleteGroupsRequest struct {\n\tVersion int16\n\tGroups  []string\n}\n\nfunc (r *DeleteGroupsRequest) setV"
  },
  {
    "path": "delete_groups_request_test.go",
    "chars": 1745,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDeleteGroupsRequest = []byte{0, 0, 0, 0}\n\n\tsingleD"
  },
  {
    "path": "delete_groups_response.go",
    "chars": 2127,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\ntype DeleteGroupsResponse struct {\n\tVersion         int16\n\tThrottleTime    time.Dura"
  },
  {
    "path": "delete_groups_response_test.go",
    "chars": 3313,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"testing\"\n)\n\nvar (\n\temptyDeleteGroupsResponse = []byte{\n\t\t0,"
  },
  {
    "path": "delete_offsets_request.go",
    "chars": 1925,
    "preview": "package sarama\n\ntype DeleteOffsetsRequest struct {\n\tVersion    int16\n\tGroup      string\n\tpartitions map[string][]int32\n}"
  },
  {
    "path": "delete_offsets_request_test.go",
    "chars": 1005,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDeleteOffsetsRequest = []byte{\n\t\t0, 3, 'f', 'o', '"
  },
  {
    "path": "delete_offsets_response.go",
    "chars": 2488,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\ntype DeleteOffsetsResponse struct {\n\tVersion int16\n\t// The top-level error code, or "
  },
  {
    "path": "delete_offsets_response_test.go",
    "chars": 1691,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\temptyDeleteOffsetsResponse = []byte{\n\t\t0, 0, // no"
  },
  {
    "path": "delete_records_request.go",
    "chars": 2936,
    "preview": "package sarama\n\nimport (\n\t\"slices\"\n\t\"sort\"\n\t\"time\"\n)\n\n// request message format is:\n// [topic] timeout(int32)\n// where t"
  },
  {
    "path": "delete_records_request_test.go",
    "chars": 638,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar deleteRecordsRequest = []byte{\n\t0, 0, 0, 2,\n\t"
  },
  {
    "path": "delete_records_response.go",
    "chars": 3629,
    "preview": "package sarama\n\nimport (\n\t\"slices\"\n\t\"sort\"\n\t\"time\"\n)\n\n// response message format is:\n// throttleMs(int32) [topic]\n// whe"
  },
  {
    "path": "delete_records_response_test.go",
    "chars": 765,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar deleteRecordsResponse = []byte{\n\t0, 0, 0, 100"
  },
  {
    "path": "delete_topics_request.go",
    "chars": 1975,
    "preview": "package sarama\n\nimport \"time\"\n\ntype DeleteTopicsRequest struct {\n\tVersion int16\n\tTopics  []string\n\tTimeout time.Duration"
  },
  {
    "path": "delete_topics_request_test.go",
    "chars": 1010,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tdeleteTopicsRequest = []byte{\n\t\t0, 0, 0, 2"
  },
  {
    "path": "delete_topics_response.go",
    "chars": 2179,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\ntype DeleteTopicsResponse struct {\n\tVersion         int16\n\tThrottleTime    time.Dura"
  },
  {
    "path": "delete_topics_response_test.go",
    "chars": 848,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\tdeleteTopicsResponseV0 = []byte{\n\t\t0, 0, 0"
  },
  {
    "path": "describe_client_quotas_request.go",
    "chars": 4439,
    "preview": "package sarama\n\n// DescribeClientQuotas Request (Version: 0) => [components] strict\n//   components => entity_type match"
  },
  {
    "path": "describe_client_quotas_request_test.go",
    "chars": 2932,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\tdescribeClientQuotasRequestAll = []byte{\n\t\t0, 0, 0, 0, "
  },
  {
    "path": "describe_client_quotas_response.go",
    "chars": 6499,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\n// DescribeClientQuotas Response (Version: 0) => throttle_time_ms error_code error_m"
  },
  {
    "path": "describe_client_quotas_response_test.go",
    "chars": 4485,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n\n\tassert \"github.com/stretchr/testify/require\"\n)\n\nva"
  },
  {
    "path": "describe_cluster_request.go",
    "chars": 2559,
    "preview": "package sarama\n\n// DescribeClusterEndpointType enumerates the DescribeCluster endpoint types\n// defined by the Kafka pro"
  },
  {
    "path": "describe_cluster_request_test.go",
    "chars": 1535,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nfunc TestDescribeClusterRequestVersions(t *testing.T) {\n\tt.Run"
  },
  {
    "path": "describe_cluster_response.go",
    "chars": 4037,
    "preview": "package sarama\n\nimport \"time\"\n\ntype DescribeClusterResponse struct {\n\tVersion int16\n\n\tThrottleTimeMs int32\n\tErr         "
  },
  {
    "path": "describe_cluster_response_test.go",
    "chars": 702,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nfunc TestDescribeClusterResponse(t *testing.T) {\n\trib := &Desc"
  },
  {
    "path": "describe_configs_request.go",
    "chars": 2261,
    "preview": "package sarama\n\ntype DescribeConfigsRequest struct {\n\tVersion         int16\n\tResources       []*ConfigResource\n\tIncludeS"
  },
  {
    "path": "describe_configs_request_test.go",
    "chars": 2781,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDescribeConfigsRequest = []byte{\n\t\t0, 0, 0, 0, // "
  },
  {
    "path": "describe_configs_response.go",
    "chars": 6245,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\t\"time\"\n)\n\ntype ConfigSource int8\n\nfunc (s ConfigSource) String() string {\n\tswitch s {\n\t"
  },
  {
    "path": "describe_configs_response_test.go",
    "chars": 6500,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\tdescribeConfigsResponseEmpty = []byte{\n\t\t0, 0, 0, "
  },
  {
    "path": "describe_groups_request.go",
    "chars": 1745,
    "preview": "package sarama\n\ntype DescribeGroupsRequest struct {\n\tVersion                     int16\n\tGroups                      []st"
  },
  {
    "path": "describe_groups_request_test.go",
    "chars": 2919,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDescribeGroupsRequest = []byte{0, 0, 0, 0}\n\n\tsingl"
  },
  {
    "path": "describe_groups_response.go",
    "chars": 7575,
    "preview": "package sarama\n\nimport \"time\"\n\ntype DescribeGroupsResponse struct {\n\t// Version defines the protocol version to use for "
  },
  {
    "path": "describe_groups_response_test.go",
    "chars": 9125,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"testing\"\n\n\t\"github.com/stretchr/testify/a"
  },
  {
    "path": "describe_log_dirs_request.go",
    "chars": 2617,
    "preview": "package sarama\n\n// DescribeLogDirsRequest is a describe request to get partitions' log size\ntype DescribeLogDirsRequest "
  },
  {
    "path": "describe_log_dirs_request_test.go",
    "chars": 1733,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDescribeLogDirsRequest = []byte{255, 255, 255, 255"
  },
  {
    "path": "describe_log_dirs_response.go",
    "chars": 6248,
    "preview": "package sarama\n\nimport \"time\"\n\ntype DescribeLogDirsResponse struct {\n\tThrottleTime time.Duration\n\n\t// Version 0 and 1 ar"
  },
  {
    "path": "describe_log_dirs_response_test.go",
    "chars": 9169,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nvar (\n\tdescribeLogDirsResponseEmpty = []byte{\n\t\t0, 0, 0, "
  },
  {
    "path": "describe_user_scram_credentials_request.go",
    "chars": 2164,
    "preview": "package sarama\n\n// DescribeUserScramCredentialsRequest is a request to get list of SCRAM user names\ntype DescribeUserScr"
  },
  {
    "path": "describe_user_scram_credentials_request_test.go",
    "chars": 866,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\temptyDescribeUserScramCredentialsRequest = []byte{\n\t\t1,"
  },
  {
    "path": "describe_user_scram_credentials_response.go",
    "chars": 4250,
    "preview": "package sarama\n\nimport \"time\"\n\ntype ScramMechanismType int8\n\nconst (\n\tSCRAM_MECHANISM_UNKNOWN ScramMechanismType = iota "
  },
  {
    "path": "describe_user_scram_credentials_response_test.go",
    "chars": 1549,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar (\n\temptyDescribeUserScramCredentialsResponse "
  },
  {
    "path": "dev.yml",
    "chars": 115,
    "preview": "name: sarama\n\nup:\n  - go:\n      version: '1.17.6'\n\ncommands:\n  test:\n    run: make test\n    desc: 'run unit tests'\n"
  },
  {
    "path": "docker-compose.yml",
    "chars": 6099,
    "preview": "x-zookeeper-base: &zookeeper-base\n  image: 'docker.io/library/zookeeper:3.7.2'\n  init: true\n  restart: always\n  profiles"
  },
  {
    "path": "elect_leaders_request.go",
    "chars": 2464,
    "preview": "package sarama\n\ntype ElectLeadersRequest struct {\n\tVersion         int16\n\tType            ElectionType\n\tTopicPartitions "
  },
  {
    "path": "elect_leaders_request_test.go",
    "chars": 2631,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n)\n\nvar (\n\telectLeadersRequestOneTopicV1 = []byte{\n\t"
  },
  {
    "path": "elect_leaders_response.go",
    "chars": 3523,
    "preview": "package sarama\n\nimport \"time\"\n\ntype PartitionResult struct {\n\tErrorCode    KError\n\tErrorMessage *string\n}\n\nfunc (b *Part"
  },
  {
    "path": "elect_leaders_response_test.go",
    "chars": 736,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar electLeadersResponseOneTopic = []byte{\n\t0, 0, 3, 232, // T"
  },
  {
    "path": "election_type.go",
    "chars": 190,
    "preview": "package sarama\n\ntype ElectionType int8\n\nconst (\n\t// PreferredElection constant type\n\tPreferredElection ElectionType = 0\n"
  },
  {
    "path": "encoder_decoder.go",
    "chars": 3231,
    "preview": "package sarama\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/rcrowley/go-metrics\"\n)\n\n// Encoder is the interface that wraps the basic E"
  },
  {
    "path": "encoder_decoder_fuzz_test.go",
    "chars": 1309,
    "preview": "//go:build go1.18 && !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"testing\"\n)\n\nfunc FuzzDecodeEncodeProduceRequest(f "
  },
  {
    "path": "end_txn_request.go",
    "chars": 1298,
    "preview": "package sarama\n\ntype EndTxnRequest struct {\n\tVersion           int16\n\tTransactionalID   string\n\tProducerID        int64\n"
  },
  {
    "path": "end_txn_request_test.go",
    "chars": 364,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar endTxnRequest = []byte{\n\t0, 3, 't', 'x', 'n',\n\t0, 0, 0, 0,"
  },
  {
    "path": "end_txn_response.go",
    "chars": 1093,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\ntype EndTxnResponse struct {\n\tVersion      int16\n\tThrottleTime time.Duration\n\tErr   "
  },
  {
    "path": "end_txn_response_test.go",
    "chars": 326,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nvar endTxnResponse = []byte{\n\t0, 0, 0, 100,\n\t0, 4"
  },
  {
    "path": "entrypoint.sh",
    "chars": 1567,
    "preview": "#!/bin/bash\n\nset -eu\nset -o pipefail\n\nKAFKA_VERSION=\"${KAFKA_VERSION:-3.9.1}\"\nKAFKA_HOME=\"/opt/kafka-${KAFKA_VERSION}\"\n\n"
  },
  {
    "path": "errors.go",
    "chars": 26095,
    "preview": "package sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"strings\"\n)\n\n// ErrOutOfBrokers is the error returned when the client has run"
  },
  {
    "path": "errors_test.go",
    "chars": 1635,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"net\"\n\t\"testing\"\n)\n\nfunc TestSentinelWithSingleWrappe"
  },
  {
    "path": "examples/README.md",
    "chars": 1423,
    "preview": "# Sarama examples\n\nThis folder contains example applications to demonstrate the use of Sarama. For code snippet examples"
  },
  {
    "path": "examples/consumergroup/README.md",
    "chars": 347,
    "preview": "# Consumergroup example\n\nThis example shows you how to use the Sarama consumer group consumer. The example simply starts"
  },
  {
    "path": "examples/consumergroup/go.mod",
    "chars": 852,
    "preview": "module github.com/IBM/sarama/examples/consumer\n\ngo 1.25.0\n\nrequire github.com/IBM/sarama v1.46.3\n\nrequire (\n\tgithub.com/"
  },
  {
    "path": "examples/consumergroup/go.sum",
    "chars": 7725,
    "preview": "github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1"
  },
  {
    "path": "examples/consumergroup/main.go",
    "chars": 5837,
    "preview": "package main\n\n// SIGUSR1 toggle the pause/resume consumption\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"flag\"\n\t\"log\"\n\t\"os\"\n\t\"os/sig"
  },
  {
    "path": "examples/interceptors/README.md",
    "chars": 5299,
    "preview": "# Interceptors Example\n\nIt creates a *Producer* interceptor to produce some [OpenTelemetry](https://github.com/open-tele"
  },
  {
    "path": "examples/interceptors/go.mod",
    "chars": 1316,
    "preview": "module github.com/IBM/sarama/examples/interceptors\n\ngo 1.25.0\n\nrequire (\n\tgithub.com/IBM/sarama v1.46.3\n\tgo.opentelemetr"
  },
  {
    "path": "examples/interceptors/go.sum",
    "chars": 9754,
    "preview": "github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=\ngithub.com/davecgh/go-spew v1.1"
  },
  {
    "path": "examples/interceptors/main.go",
    "chars": 2252,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"flag\"\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"os/signal\"\n\t\"strings\"\n\t\"time\"\n\n\tstdout \"go.opentelemetry"
  },
  {
    "path": "examples/interceptors/trace_interceptor.go",
    "chars": 2727,
    "preview": "package main\n\nimport (\n\t\"context\"\n\t\"strings\"\n\n\t\"go.opentelemetry.io/otel/attribute\"\n\tsdktrace \"go.opentelemetry.io/otel/"
  },
  {
    "path": "fetch_request.go",
    "chars": 8175,
    "preview": "package sarama\n\nimport \"fmt\"\n\ntype fetchRequestBlock struct {\n\tVersion int16\n\t// currentLeaderEpoch contains the current"
  },
  {
    "path": "fetch_request_test.go",
    "chars": 2944,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\tfetchRequestNoBlocks = []byte{\n\t\t0xFF, 0xFF, 0xFF, 0xFF"
  },
  {
    "path": "fetch_response.go",
    "chars": 14823,
    "preview": "package sarama\n\nimport (\n\t\"errors\"\n\t\"sort\"\n\t\"time\"\n\n\t\"github.com/rcrowley/go-metrics\"\n)\n\nconst (\n\tinvalidLeaderEpoch    "
  },
  {
    "path": "fetch_response_test.go",
    "chars": 17635,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"testing\"\n)\n\nvar (\n\temptyFetchResponse = []byte{\n\t\t"
  },
  {
    "path": "find_coordinator_request.go",
    "chars": 1378,
    "preview": "package sarama\n\ntype CoordinatorType int8\n\nconst (\n\tCoordinatorGroup CoordinatorType = iota\n\tCoordinatorTransaction\n)\n\nt"
  },
  {
    "path": "find_coordinator_request_test.go",
    "chars": 757,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport \"testing\"\n\nvar (\n\tfindCoordinatorRequestConsumerGroup = []byte{\n\t\t0, 5, '"
  },
  {
    "path": "find_coordinator_response.go",
    "chars": 2023,
    "preview": "package sarama\n\nimport (\n\t\"time\"\n)\n\nvar NoNode = &Broker{id: -1, addr: \":-1\"}\n\ntype FindCoordinatorResponse struct {\n\tVe"
  },
  {
    "path": "find_coordinator_response_test.go",
    "chars": 1944,
    "preview": "//go:build !functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestFindCoordinatorResponse(t *testing.T) {\n"
  },
  {
    "path": "functional_admin_test.go",
    "chars": 14087,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"maps\"\n\t\"slices\"\n\t\"strconv\"\n\t\"testing\"\n\t\"time\"\n\n\t\"git"
  },
  {
    "path": "functional_client_test.go",
    "chars": 4307,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestFuncConnectionFailure(t "
  },
  {
    "path": "functional_consumer_follower_fetch_test.go",
    "chars": 2582,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"fmt\"\n\t\"strconv\"\n\t\"sync\"\n\t\"testing\"\n\t\"time\"\n)\n\nfunc TestCons"
  },
  {
    "path": "functional_consumer_group_test.go",
    "chars": 18384,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"reflect\"\n\t\"strings\"\n\t\"sync\"\n\t\"sync/atomic\""
  },
  {
    "path": "functional_consumer_staticmembership_test.go",
    "chars": 6634,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"encoding/json\"\n\t\"errors\"\n\t\"math\"\n\t\"reflect\"\n\t\"testing\"\n)\n\nfunc TestFun"
  },
  {
    "path": "functional_consumer_test.go",
    "chars": 17609,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"math\"\n\t\"os\"\n\t\"sort\"\n\t\"strconv\"\n\t\"strings\"\n"
  },
  {
    "path": "functional_java_interop_test.go",
    "chars": 8088,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"bufio\"\n\t\"context\"\n\t\"fmt\"\n\t\"os/exec\"\n\t\"strings\"\n\t\"sync\"\n\t\"testing\"\n\t\"ti"
  },
  {
    "path": "functional_offset_manager_test.go",
    "chars": 1096,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"testing\"\n)\n\nfunc TestFuncOffsetManager(t *testing.T) {\n\tcheckKafkaVers"
  },
  {
    "path": "functional_producer_test.go",
    "chars": 39787,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"os\"\n\t\"os/exec\"\n\t\"strconv\"\n\t\"strings\"\n\t\"syn"
  },
  {
    "path": "functional_test.go",
    "chars": 16262,
    "preview": "//go:build functional\n\npackage sarama\n\nimport (\n\t\"context\"\n\t\"errors\"\n\t\"fmt\"\n\t\"log\"\n\t\"net\"\n\t\"net/url\"\n\t\"os\"\n\t\"os/exec\"\n\t\""
  }
]

// ... and 139 more files (download for full content)

About this extraction

This page contains the full source code of the IBM/sarama GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 339 files (2.1 MB), approximately 557.7k tokens, and a symbol index with 3569 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!