Как сбросить кафку, чтобы интегрировать ее в процесс тестирования JUnit?

Я тестирую и отлаживаю приложение для обработки событий (или потоковой обработки с отслеживанием состояния), которое работает поверх kafka и использует samza. Я хочу удалить очереди и темы в kafka, чтобы задания samza получали пустую установку kafka при запуске.

Как мне это сделать??


Изменить:

Вопрос гораздо более сложный и конкретный, чем то, что я написал вначале.

Как утверждает Дэвид, существует решение для очистки темы, начиная с kafka 0.8.2: Очистить очередь Kafka

Что меня интересует, так это настройка среды тестирования, которая автоматически загружает zookeeper и kafka (которые входят в мой репозиторий git в виде двоичных пакетов).

Я использую среду gradle + eclipse и JUnit. Я запускаю интеграционные тесты из eclipse (как тесты JUnit).

Как автоматизировать загрузку? Должен ли я создать специальный тестовый класс для настройки среды и запуска kafka и zookeeper? Есть ли какой-нибудь справочный пример/код? Идея заключалась бы в том, чтобы загрузить среду, запустить несколько тестов и остановиться. Если бы этот процесс можно было сделать за несколько секунд, было бы лучше.


person user2108278    schedule 17.03.2016    source источник
comment
Это дублирующий вопрос, заданный и отвеченный ранее. См. здесь: stackoverflow.com/questions/16284399/purge-kafka-queue   -  person David Griffin    schedule 17.03.2016
comment
Как я думаю об этом, это может быть немного более широкий вопрос. Я собираюсь ответить на более широкий вопрос и вернуться к конкретным подходам.   -  person David Griffin    schedule 17.03.2016


Ответы (1)


Существуют различные подходы к очистке отдельных тем. Все они могут быть расширены до очистки всех ваших тем. Тем не менее, я думаю, вы задаете более широкий вопрос, связанный с созданием базовой среды для Kafka — что-то, что вам, возможно, понадобится для тестирования. Или, может быть, у вас есть производственный процесс, который каждый раз начинается с нуля. На самом деле это разные сценарии.

Для тестирования

Если бы вы говорили о тестировании, то я бы специально сделал что-то грубое. Во-первых, я бы настроил Kafka так, как мне хотелось бы, чтобы она выглядела при запуске. Затем я бы выключил его и создал резервную копию - либо с помощью tar, либо, возможно, даже создав образ диска, если я использую виртуальную машину.

Я использовал его и злоупотреблял им во время тестирования, а затем выбрасывал все это, когда я был готов. «Сброс kafka» будет просто означать восстановление либо через untar, либо с образа диска, либо как-то еще (даже rsync или просто cp из другого каталога).

Для тестирования мне очень нужно чистое начало, поэтому я предпочитаю грубую силу.

Во время производства

Если это часть ваших производственных процессов — и я сомневаюсь в разумности этого на первый взгляд — тогда я бы постарался сначала не потерять данные. Либо включите резервную копию в свой процесс, либо фактически не сбрасывайте темы.

Переименование темы еще не существует -- но вы можете использовать тот же подход, который будет использоваться. Не работайте напрямую с названиями тем — используйте словарь для сопоставления виртуальных названий тем с реальными названиями тем.

Затем, вместо того, чтобы каждый раз «сбрасывать» Kafka, создайте новые версии всех тем и обновите словарь, чтобы сопоставить имя виртуальной темы с вновь созданными версиями темы.

person David Griffin    schedule 17.03.2016
comment
Это для тестирования. Этот связанный вопрос уже был в: stackoverflow.com/a/30833940/2108278 - person user2108278; 21.03.2016
comment
Да, я упомянул об этом в своем ответе, но это немного более высокий уровень. В этой статье речь шла об очистке отдельных тем, я поднимал этот вопрос на более высоком уровне — как сбросить всю Кафку для тестирования, а не только отдельную тему. - person David Griffin; 21.03.2016