CLI-утилита для автоматической генерации и отправки сообщений в Kafka. Подходит для Windows 11 и не требует librdkafka: проект написан на Go и использует github.com/segmentio/kafka-go.
- автоматически генерировать
key,value,headers; - отправлять одно или несколько сообщений за запуск;
- работать в непрерывном режиме с заданной скоростью;
- подключаться к Kafka по SSL/TLS;
- запускаться через
go run,go buildили PowerShell-скрипт; - при необходимости все еще работать через
-configв legacy-режиме.
go run .\cmd\kafka-json-loader `
-brokers localhost:9092 `
-topic demo.events `
-count 10 `
-key-prefix order `
-event-type order.created `
-source windows-loader.\scripts\send-kafka.ps1 `
-Brokers "localhost:9092" `
-Topic "demo.events" `
-Count 10 `
-KeyPrefix "order" `
-EventType "order.created" `
-Source "windows-loader"Что генерируется автоматически на каждый message:
key: строка видаorder-<unix>-000001headers:content-type,generator,source,host,sequence,event-typevalue: JSON-объект сid,sequence,eventType,generatedAt,customer,order,flags
go run .\cmd\kafka-json-loader `
-brokers localhost:9092 `
-topic demo.events `
-continuous `
-rate 20 `
-key-prefix load `
-event-type load.testgo run .\cmd\kafka-json-loader `
-brokers localhost:9092 `
-topic demo.events `
-continuous `
-interval 500ms `
-duration 2m.\scripts\send-kafka.ps1 `
-Brokers "localhost:9092" `
-Topic "demo.events" `
-Continuous `
-Rate 20 `
-Duration "5m"В непрерывном режиме:
-continuousвключает бесконечную генерацию до остановки процесса.-rateзадает сообщений в секунду.-intervalзадает паузу между сообщениями.-durationзадает ограничение по времени, после которого утилита завершится сама.- нужно указывать либо
-rate, либо-interval, но не оба сразу.
-brokers- список брокеров через запятую, обязательно.-topic- имя топика, обязательно.-count- сколько сообщений сгенерировать.-continuous- непрерывная генерация сообщений до остановки процесса.-rate- сообщений в секунду для непрерывного режима.-interval- интервал между сообщениями для непрерывного режима.-duration- максимальная длительность непрерывного режима.-key-prefix- префикс для Kafka key.-event-type- тип события внутри JSON payload.-source- источник в payload и headers.-client-id- Kafka client id.-acks-none,one,all.-compression-none,gzip,snappy,lz4,zstd.
go run .\cmd\kafka-json-loader `
-brokers kafka01.example.local:9093,kafka02.example.local:9093 `
-topic secure.events `
-count 5 `
-ssl `
-ssl-server-name kafka01.example.local `
-ssl-ca-file .\certs\ca.pem `
-ssl-cert-file .\certs\client.pem `
-ssl-key-file .\certs\client-key.pem-ssl- включает TLS.-ssl-server-name- имя хоста для TLS handshake и проверки сертификата.-ssl-ca-file- PEM-файл корневого или промежуточного CA.-ssl-cert-file- PEM-файл клиентского сертификата для mutual TLS.-ssl-key-file- приватный ключ клиентского сертификата.-ssl-insecure-skip-verify- отключает проверку сертификата сервера. Лучше использовать только для диагностики.
Поддерживаются два типовых режима:
- Server TLS:
-sslи-ssl-ca-file, если нужно доверять кастомному CA. - Mutual TLS: дополнительно указываются
-ssl-cert-fileи-ssl-key-file.
Если понадобится полностью ручное управление payload, старый режим все еще работает:
go run .\cmd\kafka-json-loader -config .\payload.jsongo build -o .\bin\kafka-json-loader.exe .\cmd\kafka-json-loaderПосле сборки:
.\bin\kafka-json-loader.exe -brokers localhost:9092 -topic demo.events -count 100Пример непрерывной отправки:
.\bin\kafka-json-loader.exe -brokers localhost:9092 -topic demo.events -continuous -rate 50 -duration 10mРекомендую такой набор:
Go 1.22+- для сборки и запуска утилиты.PowerShell 7- удобный стандартный способ запускать скрипты и автоматизацию.Windows Terminal- удобнее для работы с несколькими профилями и логами.Docker Desktop- если нужен локальный Kafka/Redpanda для тестов.kcatчерезWSL- полезен для быстрой проверки того, что сообщения действительно попали в топик.
Если нужен максимально простой локальный стенд на Windows, практичнее всего использовать не "чистый" Kafka, а Redpanda в Docker.
Если Kafka работает с SSL-сертификатами, удобно хранить их в отдельной папке проекта, например .\certs\, и передавать пути через CLI-флаги.