Вариант использования Kafka для отправки данных во внешнюю систему - PullRequest
0 голосов
/ 25 мая 2018

Изучая кафку в документации, я нашел следующее предложение:

Очередь - это стандартный тип обмена сообщениями, о котором думает большинство людей: сообщения создаются одной частью приложения и потребляются другой частью этого то же самое приложение.Другие приложения не заинтересованы в этих сообщениях, потому что они предназначены для координации действий или состояния одной системы.Этот тип сообщения используется для отправки электронных писем, распространения наборов данных, вычисленных другим онлайн-приложением, или координации с внутренним компонентом.

Это означает, что темы Kafka не подходят для потоковой передачи данных во внешние приложения.,Однако в нашем приложении мы используем Kafka для этой цели.У нас есть потребители, которые читают сообщения из тем Кафки и пытаются отправить их во внешнюю систему.При таком подходе у нас возникает ряд проблем:

  1. Нужен отдельный раздел для каждого внешнего приложения (предположим, что число номеров внешних приложений> 300 не подходит)

  2. Сообщения во внешнюю систему могут не работать, если внешнее приложение недоступно или по какой-либо другой причине.Неправильно повторять попытку отправить одно и то же сообщение и не фиксировать смещение.Другой способ - нет хорошо сконфигурированного журнала, когда я вижу все сообщения о сбоях и пытаюсь отправить их заново.

Каковы другие оптимальные методы потоковой передачи данных во внешнее приложение?ИЛИ Кафка - хороший выбор для этой цели?

1 Ответ

0 голосов
/ 25 мая 2018

Просто делюсь опытом.Мы широко используем Kafka для интеграции внешних приложений в корпоративную среду.

  1. Мы используем шаблон topic-per-event-type .В настоящее время количество тем составляет около 500. Управление сложно, но у нас есть свой собственный инструмент, так что это возможно.
  2. По возможности мы расширяем внешнее приложение для интеграции с Kafka.Таким образом, потребители становятся частью внешнего приложения, а когда приложение недоступно, они просто не извлекают данные.Если расширение внешней системы невозможно, мы используем разъемы, которые в основном реализованы нами внутри компании.Мы различаем два типа ошибок: исправимые и неустранимые.Если ошибка не может быть исправлена, например, сообщение повреждено или недействительно, мы регистрируем ошибку и фиксируем смещение.Если ошибка может быть исправлена, например, база данных для записи сообщения недоступна, то мы не фиксируем сообщение, приостанавливаем потребителей на некоторый период времени и после этого повторяем попытку.В вашем случае, вероятно, имеет смысл иметь больше тем с разным поведением (регистрация ошибок, перенаправление ошибочных сообщений в разные темы и т. Д.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...