2017-01-30 2 views
1

У меня есть небольшой проект, который использует Redis для задач очереди задач. Вот как это работает в принципе.Использование Kafka вместо Redis для целей очереди

У меня есть два компонента в системе: настольный клиент (может быть более чем один) и на стороне сервера приложений. У серверного приложения есть выбор задач для настольных клиентов. Когда клиент приходит, ему предоставляется первая доступная задача от тяги. Поскольку задача имеет идентификатор, когда клиент рабочего стола возвращается с результатами, серверное приложение может распознавать задачу по ее идентификатору. В основном, я делаю следующее в Redis:

  1. Сохраняйте все задачи как объекты.
  2. очередь Keep (пул) задачи в нескольких списках: очередь, при условии, обработки.

Когда задача предоставляется на рабочий стол клиента, я использую RPOPLPUSH в Redis, чтобы переместить идентификатор из списка очереди в список при условии.

Когда я получаю ответ от настольного клиента, я использую LREM для данного идентификатора задачи из , предоставленного (если он не работает, я получил задание, которое не было предоставлено или уже обработано, или просто никогда не существовало - так, я нарушаю исполнение). Затем я использую LPUSH для добавления идентификатора задачи в список . Учитывая, что у меня есть уникальные идентификаторы задач (контролируемые на уровне моего приложения), я избегаю дубликатов в списках Redis.

Когда задача завершена (результат получен от клиента рабочего стола обрабатывается и как-то сохранен), я удаляю задачу из списка обработки и удаляю объект задачи из Redis.

Если что-то пойдет не так на любом этапе (т. Е. Задача застревает в списке обработки или предоставления), я могу переместить задачу обратно в список очередей и перепрограммировать ее.

Теперь вопрос: как-то можно сделать аналогичный материал в Apache Kafka? Мне не нужно точного поведения, как в Redis - все, что мне нужно, - это предоставить задачу настольному клиенту (не должно быть возможности предоставить одну и ту же задачу дважды) и пометить/изменить его состояние в соответствии с фактическим статус обработки (новый, предоставленный, обработка), чтобы я мог контролировать процесс и восстанавливать задачи, которые не были обработаны из-за некоторых проблем. Если это возможно, может ли кто-нибудь описать применимый рабочий процесс?

ответ

0

Кафка может выступать в качестве стандартной очереди. Проверьте функцию consumer group.

Если вопрос о целесообразности, пожалуйста, обратитесь Is Apache Kafka appropriate for use as a task queue?

Мы используем Кафка как очереди задач, одна из рассмотрения пошли в пользу Кафка, что это уже в нашей прикладной экосистеме, нашли проще, чем добавить еще один компонент.

Смежные вопросы