kafka-spark-demo
Как запустить воркшоп
- git clone https://gitverse.ru/sc/dtirskikh/kafka-spark-demo.git
- cd kafka-spark-demo
- В файл akhq/app/application.yml ввести пароль от Кафки Yandex Practicum (есть в спринте 8)
- docker-compose build
- docker-compose up
NIFI
https://localhost:18443/nifi
При обращении к адресу проигнорировать ошибку сертификата. Потом отказаться от применения локальных сертификатов.
Для NiFi в docker-compose.yml пробрасывается volume.
volumes:
- ./nifi/conf:/opt/nifi/nifi-current/conf
Проброс позволяет использовать ранее подготовленные пайплайны и сгенерированные креды.
Username 8e55070e-822d-4ec3-a1ba-e082f296a4ac
Password S3NQ4mar9GgOboq912GX2Nq2KpjBnKcb
Но такой подход не всегда работает и NiFi может не запускаться. В случае проблемы необходимо закомментировать проброс в docker-compose.yml
#volumes:
# - ./nifi/conf:/opt/nifi/nifi-current/conf
Данная конфигурация не включает никаких пайплайнов. Креды генерируются при создании контейнера и находятся в логах.
Быстрый поиск кредов осуществляется командой:
docker logs nifi_dev 2>&1 | grep "Generated Username\|Generated Password"
Generated Username [b121c36d-e817-434c-ad02-90b6418020a2]
Generated Password [t3nKJ3f2DH8OO97uGSYi2mGCpybIlW6+]
AKHQ
http://127.0.0.1:8081
В файл akhq/app/application.yml ввести пароль от Кафки Yandex Practicum (есть в спринте 8)
Jupyter
Необходимо в логах контейнера найти ссылку с токеном
docker logs pyspark 2>&1 | grep "?token"
Ссылка будет примерно такой, только с другим токеном
http://127.0.0.1:8888/lab?token=e4b7a12929435fbe981ffaf422eadef31f0cbf567ba62cd1
Kafka local
Создать топик с помощью утилиты kafka-topics через контейнер kafka
docker exec -it kafka /bin/bash
kafka-topics --bootstrap-server localhost:9092 \
--topic yap-topic-parts --create --if-not-exists \
--partitions 4
Запустить producer c хоста (консоль вне докера).
значаит будет ключ, а через двоеточие само сообщение. Например,
kcat -b localhost:29092 -t yap-topic-parts -P -K:
Запустить consumer
значит выводить ключ сообщения через пробел
kcat -b localhost:29092 -t yap-topic-parts -C -K " "
Также можно добавить форматирование вывода сообщений:"
.
Описание
https://docs.confluent.io/platform/current/clients/examples/kcat.html
https://docs.confluent.io/platform/current/tools/kafkacat-usage.html
https://www.conduktor.io/blog/understanding-kafkas-internal-storage-and-log-retention/
--
С контейнера адрес брокера будет
.
Например, можно использовать контейнер pyspark
docker exec -it pyspark /bin/bash
И в нём уже запускать продюсера
kafkacat -b kafka:9092 -t yap-topic-parts -P -K:
Или консъюмера
kafkacat -b kafka:9092 -t yap-topic-parts -C
Также можно явно писать в конкретную партцию
kcat == kafkacat. Эта одна и та же утилита
Физические файлы можно посмотреть внутри контейнера Kafka
docker exec -it kafka /bin/bash
ls /var/lib/kafka/data/
Расшифровать файлы .log | .index | .timeindex | ...
- файл с данными
- маппинг офсета сообщения в байтоовое смещение в партиции
- маппинг timestamp сообщения в байтовое смещение в партиции
- настройка обновления индексных файлов. По умолчанию, 4096 байт
kafka-run-class kafka.tools.DumpLogSegments --deep-iteration --print-data-log --files /path/to/file
Настройки
docker exec -it kafka /bin/bash
ls /etc/kafka
Postgres
При инициализации запускается скрипт
Подготавливаются тестовая схема
Есть 2 пользователя
user: postgres, password: example
user: ya_practicum, password: ya_practicum