Кафка против JMS для публикации событий
В нашем сценарии у нас есть набор микро-сервисов, которые взаимодействуют с другими сервисами, отправляя сообщения о событиях. Мы ожидаем миллионы сообщений в день на пике. Каждое сообщение предназначено для одного или нескольких типов слушателей. Наши требования заключаются в следующем:
- Ноль потерянных сообщений.
- Возможность динамической регистрации нескольких слушателей определенного типа для увеличения пропускной способности.
- Слушатели не гарантированно будут живы при отправке сообщений.
Мы рассматриваем 2 варианта:
- Отправьте каждое сообщение в основную очередь JMS, затем прослушиватели этой очереди направят сообщения в определенные очереди в соответствии с содержимым сообщений, а затем целевые службы будут прослушивать эти конкретные очереди.
- Отправляйте сообщения в тему Kafka по типу сообщения, после чего целевые службы подпишутся на соответствующую тему и получат сообщения.
Какие плюсы и минусы для использования в этих целях JMS или Kafka?
2 ответа
Я бы предложил использовать Kafka, так как он имеет механизм отказоустойчивости, и даже если какое-либо сообщение потеряно или не перехвачено каким-либо слушателем, вы можете легко получить его из кластера Kafka.
Наряду с этим вы можете легко добавить нового слушателя / слушателя в группу, и kafka вместе с zookeeper позаботятся об этом.
Таким образом, Kafka - это распределенная система обмена сообщениями с публикацией и подпиской, которая разработана для быстрой, масштабируемой и долговечной работы. Как и многие системы обмена сообщениями с публикацией и подпиской, Kafka поддерживает потоки сообщений в темах. Производители пишут данные по темам, а потребители читают по темам.
Очень легко для интеграции.
Ваше первое требование - "ноль потерянных сообщений". Однако, если вы хотите семантику публикации-подписки (то есть темы в JMS), но слушатели не гарантированно будут живы при отправке сообщений, тогда JMS не является стартовым, так как эти сообщения просто отбрасываются (то есть теряются).