Kafka gateway: keep repeated header names and header order
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
調査の方向性
Start with gateways/kafka/docs/BRIDGE_MAPPING.md to see how headers are currently mapped and sorted on Fetch. The issue says kafka_protocol keeps only the last value of a repeated header name, so the raw record bytes need to be read for headers. The open question on whether every record or only repeated-name records keep order must be settled before changing the envelope. Done means the KafkaJS array-header producer succeeds and a record with a repeated header name matches after Produce and Fetch.
索引モデルが issue の本文から書いたものです。
説明
Summary
A record with a repeated header name gets INVALID_RECORD (87), and Fetch returns headers sorted by name (gateways/kafka/docs/BRIDGE_MAPPING.md). Kafka allows both.
Who hits it:
- KafkaJS writes array header values as repeated keys, a documented feature. If it forwards a consumed message, it writes them again. The KafkaJS layer of confluent-kafka-javascript does the same.
- Apps that append a trace header twice (https://github.com/spring-projects/spring-kafka/issues/3786).
- Error 87 fails the whole partition batch in librdkafka, franz-go and Sarama. It puts a kafka-python 3.0 producer in a fatal state, so every later send fails until a restart. A kafka-go writer at its default
acks=0loses the batch and the connection, with no error.
Open question
Does every record keep its header order, at the cost of a larger stored envelope, or only records with repeated names?
Scope
- Read headers from the raw record bytes, because
kafka_protocolkeeps only the last value of a name - Store a record with repeated names in the envelope, which keeps a list
- Return headers in their original order on Fetch, as the open question decides
- Update
gateways/kafka/docs/BRIDGE_MAPPING.md
Acceptance criteria
- A KafkaJS producer with array header values succeeds, and a consumer reads every value in order
- A record with the same header name twice is the same after Produce and Fetch
References
- 主要言語
- Rust
- スター
- 5.2k
- フォーク
- 502
- 平均マージ
- 3日 3時間
- マージ済み PR(30日)
- 163
環境構築
このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。
- Dockerfile または Docker Compose ファイルあり
- プルリクエストのテンプレートあり
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
apache/iggy のほかの issue
-
Go examples: add a message envelope producer and consumer対応中かも @ThunderGod77 が 4 日前に担当しました。 オープンgo good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
apache/iggy#4694 · コメント 3 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
HTTP client treats a consumer group as a plain consumer対応中かも @mohitduhan19 が 22 日前に担当しました。 オープンbug rust server
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
メンテナーはふだん 1 日以内に返信
-
Add the fail-fast connection option to the Rust and Python quick-starts対応中かも @QIW9 が 9 日前に担当しました。 オープンdocs good first issue
難易度 1/5 1〜3時間 初心者へのやさしさ 92/100
メンテナーはふだん 1 日以内に返信
-
ResourceNotFound from the binary protocol prints an empty key対応中かも @xalestar が今日担当しました。 オープンapi python rust
apache/iggy#4767 · コメント 2 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
Node SDK: send accepts malformed user headers that fail during polling対応中かも @Subham-KRLX が 1 日前に担当しました。 オープンbug good first issue javascript
apache/iggy#4750 · コメント 3 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
higress-group/HiRoute#405 ·
メンテナーはふだん 1 日以内に返信
-
rust_analyzer flycheck: no CLI way to enable clippy from `check.overrideCommand`対応中かも @TrapsterDK が今日担当しました。 オープンneeds-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
bazelbuild/rules_rust#4392 ·
メンテナーはふだん 2 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 73/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
🐞 bug 🧩 bevy_gantz_egui
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
nannou-org/gantz#500 ·
メンテナーはふだん 1 日以内に返信