ΠΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π΅ Π½ΠΎΠ²ΠΈΡΡ kafkalet 0.1, Π΄Π΅ΡΠΊΡΠΎΠΏ ΠΊΠ»ΠΈΠ΅Π½Ρ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ Apache Kafka. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΠΊΠ°ΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π΅Π½ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ» Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΠΊΠΎΠ»ΠΎ 15 MB, Π½Π΅ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½Π΅ Π½Π° JVM, Docker ΠΈΠ»ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ. ΠΠΎΠ΄ΡΡ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ° Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Go ΠΈ TypeScript ΠΈ ΡΠ΅ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π° ΠΏΠΎΠ΄ MIT Π»ΠΈΡΠ΅Π½Π·. Π‘Π±ΠΎΡΠΊΠΈΡΠ΅ ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²Π΅Π½ΠΈ Π·Π° macOS (Intel ΠΈ Apple Silicon), Windows ΠΈ Linux.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ ΡΠ΅Π± Π±Π°Π·ΠΈΡΠ°Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΈ, ΠΊΠ°ΡΠΎ Kafka UI ΠΈ AKHQ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΡΠ°Π·Π³ΡΡΡΠ°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡΠ΅Π½ ΠΏΡΠΎΡΠ΅Ρ Π² Docker, kafkalet ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ° ΠΊΠ°ΡΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΄Π΅ΡΠΊΡΠΎΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ β Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ Π½Π° DBeaver ΠΈΠ»ΠΈ DataGrip Π·Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ Π΄Π΅ΡΠΊΡΠΎΠΏ Kafka ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΡΠ΅Π³Π° Π±Π΅ΡΠ΅ Offset Explorer (Π±ΠΈΠ²Ρ Kafka Tool), Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° Java ΠΈ ΠΎΡΠ΄Π°Π²Π½Π° Π½Π΅ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ kafkalet Π΅ ΠΈΠ·Π³ΡΠ°Π΄Π΅Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Π°ΡΠ° Π½Π° ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊΠ° Wails v2, ΠΊΠΎΠΉΡΠΎ ΠΎΠ±Π΅Π΄ΠΈΠ½ΡΠ²Π° Go Π±Π΅ΠΊΠ΅Π½Π΄ Ρ ΡΠ΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° React 18, TypeScript ΠΈ shadcn/ui Π² Π΅Π΄ΠΈΠ½ Π½Π°ΡΠΈΠ²Π΅Π½ Π±ΠΈΠ½Π°ΡΠ΅Π½ ΡΠ°ΠΉΠ». ΠΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Kafka ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° franz-go, ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π° ΠΈΠ·ΡΡΠ»ΠΎ Π½Π° Go, Π±Π΅Π· Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ librdkafka ΠΈ CGO.
ΠΡΠ½ΠΎΠ²Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
- Π‘ΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π·Π° ΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΡΡΠ΅Π΄ΠΈ (production, staging, dev). ΠΡΠ΅ΠΊΠΈ Π±ΡΠΎΠΊΠ΅Ρ Π² ΠΏΡΠΎΡΠΈΠ»Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΈ ΡΠΌΠ΅ΡΠΊΠΈ Ρ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π±ΡΡΠ·ΠΎ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅. ΠΠ°ΡΠΎΠ»ΠΈΡΠ΅ ΠΈ ΡΠΎΠΊΠ΅Π½ΠΈΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΠΈΠ·ΡΡΠ»ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π° ΡΠ°ΠΉΠ½ΠΈ Π½Π° ΠΠ‘ (macOS Keychain, Windows Credential Manager, libsecret Π½Π° Linux) ΠΈ Π½Π΅ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅.
- Π Π΅ΠΆΠΈΠΌΡΡ Observer ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ topic Π±Π΅Π· ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ consumer group, Π±Π΅Π· ΠΊΠΎΠΌΠΈΡ Π½Π° offset ΠΈ Π±Π΅Π· ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈ Π΅ΡΠ΅ΠΊΡΠΈ Π²ΡΡΡ Ρ ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΠ΄Π΅Π»Π΅Π½ ΡΠ΅ΠΆΠΈΠΌ Consumer ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΡΠ²ΡΡΠ·Π²Π°Π½Π΅ ΠΊΡΠΌ Π³ΡΡΠΏΠ°ΡΠ° ΠΈ ΡΡΡΠ½ΠΎ ΡΠΈΠΊΡΠΈΡΠ°Π½Π΅ Π½Π° offset.
- ΠΠ°Π²ΠΈΠ³Π°ΡΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ (seek to timestamp) β ΠΏΡΠ΅Ρ ΠΎΠ΄ ΠΊΡΠΌ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π°ΡΠ° Π΄Π°ΡΠ° ΠΈ ΡΠ°Ρ, Π±Π΅Π· Π½ΡΠΆΠ΄Π° ΠΎΡ ΡΡΡΠ½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° offsets. ΠΠΎΠ΄ΠΊΡΠ΅ΠΏΠ° Π·Π° ΠΌΠ΅ΡΠΎΠ΄ΠΈ Π½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ: SASL PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER (ΡΡΠ°ΡΠΈΡΠ΅Π½ ΡΠΎΠΊΠ΅Π½ ΠΈ flow Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ), TLS Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΡΡΡΠ²ΡΡ, mTLS (Π²Π·Π°ΠΈΠΌΠ½Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΏΠΎ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΈ).
- ΠΠΎΡΠΎΠΊΠΎΠ²ΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ regex ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² ΡΠ΅Π°Π»Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠ° ΡΠ΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π½Π°Π±Π»ΡΠ΄Π΅Π½ΠΈΠ΅ Π½Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ topic-Π° Π² ΠΎΡΠ΄Π΅Π»Π½ΠΈ ΡΠ°Π±ΠΎΠ²Π΅. ΠΠΈΡΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΡΠΏΠΈΡΡΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π½Π°Π΄ 50 000 ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π±Π΅Π· Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°.
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΌΠΈ: ΡΡΠ·Π΄Π°Π²Π°Π½Π΅, ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅, ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΠ°Π·Π΄Π΅Π»ΠΈ, Π»ΠΈΠ΄Π΅ΡΠΈ ΠΈ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠ½Ρ
ΡΠΎΠ½ΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΡΠ΅ΠΏΠ»ΠΈΠΊΠΈ (ISR).
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π³ΡΡΠΏΠΈ ΠΊΠΎΠ½ΡΡΠΌΠ°ΡΠΎΡΠΈ: ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΡ (lag) ΠΏΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈ, Π½ΡΠ»ΠΈΡΠ°Π½Π΅ Π½Π° ΠΎΡΡΠ΅ΡΠΈ Π½Π° earliest, latest ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π° Π²ΡΠ΅ΠΌΠ΅Π²Π° ΠΎΡΠΌΠ΅ΡΠΊΠ°, ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° ΡΡΠ°ΡΡΠ½ΠΈΡΠΈΡΠ΅ Π² Π³ΡΡΠΏΠ°ΡΠ° (client ID, Ρ ΠΎΡΡ, Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈ ΡΠ΅ΠΌΠΈ), ΠΈΠ·ΡΡΠΈΠ²Π°Π½Π΅ Π½Π° Π³ΡΡΠΏΠΈ.
- ΠΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΠΊΠ»ΡΡ, ΡΡΠΎΠΉΠ½ΠΎΡΡ, Π·Π°Π³Π»Π°Π²ΠΈΡ ΠΈ ΡΠ΅Π»Π΅Π²ΠΈ ΡΠ°Π·Π΄Π΅Π».
- ΠΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ΅ΠΌΠΈ: Π·Π°ΠΊΡΠ΅ΠΏΠ²Π°Π½Π΅ Π½Π° ΡΠ΅ΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΠ΅ΠΌΠΈ, Π³ΡΡΠΏΠΈΡΠ°Π½Π΅ Π² ΠΈΠΌΠ΅Π½ΡΠ²Π°Π½ΠΈ ΠΏΠ°ΠΏΠΊΠΈ, ΡΡΡΡΠ΅Π½Π΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΈ ΠΈΠ·ΡΠ°Π·ΠΈ ΠΈ ΡΠΈΠ»ΡΡΠΈΡΠ°Π½Π΅ ΠΏΠΎ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π΅Π½ Π±ΡΠΎΠΉ ΡΠ°Π·Π΄Π΅Π»ΠΈ.
- ΠΠΊΡΠΏΠΎΡΡ Π½Π° Π±ΡΡΠ΅ΡΠ° Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°Ρ JSON ΠΈΠ»ΠΈ CSV.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Confluent Schema Registry Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π² ΡΠΎΡΠΌΠ°Ρ Avro.
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΎΡ JavaScript ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ Π·Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ (Protobuf, MessagePack ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΎΡΠΌΠ°ΡΠΈ).
- ΠΠΌΠΏΠΎΡΡ ΠΈ Π΅ΠΊΡΠΏΠΎΡΡ Π½Π° Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π² ΡΠΎΡΠΌΠ°Ρ JSON, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈ, Π³ΡΡΠΏΠΈ ΡΠ΅ΠΌΠΈ ΠΈ Π·Π°ΠΊΡΠ΅ΠΏΠ΅Π½ΠΈ ΡΠ΅ΠΌΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
