Создание кластера Kafka для тестирования клиентов Kafka на основе Java
У меня есть клиент Kafka, и мне нужно проверить его функциональность. Для этого мне нужно создать кластер Kafka локально и подключиться к нему. Согласно ограничениям, я не могу использовать образ Docker или K8s для этого.
Я выполнил поиск и обнаружил, что этот класс используется в тестировании, но я не могу изменить порты брокера.
Я попытался использовать Debezium KafkaCluster, но он не может создать кластер с перебоями, что приводит к периодическим сбоям тестирования.
Есть ли способ создать кластер Kafka локально, чтобы запустить интеграционные тесты для клиентов Kafka на основе Java?
2 ответа
Я делаю это все время. "Кластер" Kafka - это по крайней мере один сервер Kafka и по крайней мере один сервер Zookeeper. Оба они могут работать локально на той же самой коробке, на которой вы разрабатываете. Конечно, установка только с одним сервером kafka и узлом zookeeper не рекомендуется для работы, поскольку нет избыточности, но она отлично подходит для сквозного тестирования, отладки и т. Д.
Вот команды, которые я использую для запуска вышеупомянутого локально. Я предполагаю, что вы скачали последнюю версию пакета Kafka и в bin
каталог:
nohup ./zookeeper-server-start ../etc/kafka/zookeeper.properties > /dev/null 2>&1 &
nohup ./kafka-server-start ../etc/kafka/server-original.properties > /dev/null 2>&1 &
Мне также нужно, чтобы реестр схемы работал локально, поэтому я добавлю это:
nohup ./schema-registry-start ../etc/schema-registry/schema-registry.properties >/dev/null 2>&1 &
Обратите внимание, что все команды имеют nohup
в начале, и весь вывод игнорируется, посылая его /dev/null
, Вы можете удалить их, если вам действительно нужно просмотреть вывод журнала на консоли, или вы можете при необходимости перенаправить его в фактический файл журнала.
Что приятно с вышеизложенным, так это то, что вы можете упаковать их в сценарий (обязательно добавьте sleep 5
между каждой командой нужно дождаться, пока предыдущий сервер подключится, прежде чем переходить к следующему), а затем вы можете просто запускать скрипт каждый раз, когда вам нужно запустить кластер локально. Обратите внимание, однако, что вам нужно будет позже вручную убить процессы, то есть найти их номер pid, используя ps
выдав kill
команда и т. д.
Я знаю, это звучит так, как будто дает вам только ссылку, но я использовал библиотеку testcontainer, которая отлично справляется со своей задачей.
Ничего особенного добавить, кроме как дать вам ссылку на документ: https://www.testcontainers.org/modules/kafka/
Что ж, опубликованные ответы помогли, но я хотел чего-то другого. Закончил создание собственной реализации. Если кто захочет, они могут это использовать.
я использовал kafka.server.KafkaServer
а также org.apache.zookeeper.server.ZooKeeperServerMain
для этого.