Как стать автором
Обновить

Комментарии 9

Когда использовать Kafka

- При Event-driven architecture ...

Я бы не утверждал так однозначно. Kafka может потерять сообщения, а в RabbitMQ есть, как вы написали, есть Fanout Exchange, который должен работать с любым динамическим числом подов.

Я не работал в продакшене ни с той, ни с другой технологией, но когда выбирал платформу для event-driven, решил не в пользу кафки. Там слишком много минусов. У классических брокеров гораздо больше фишек, за что приходится платить масштабированием.

Kafka может потерять сообщения

Опишите пожалуйста механику?

а в RabbitMQ есть, как вы написали, есть Fanout Exchange

В Kafka он тоже есть

Опишите пожалуйста механику?

https://developer20.com/when-you-can-nose-messages-in-kafka/

В Kafka он тоже есть

Я не про это писал, извините. Я не полностью скопировал цитату из поста. Там утверждалось, что

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

В случае Fanout Exchange количество получателей и тем более реплик, значения не имеет. Либо я неправильно понял, как это работает, по описанию

Разумеется, в kafka это тоже есть. Там по факту только это и есть.

Основной минус SQS — он периодически выдает задержки по секунде и типичные порядка 30мс(для сравнения, rabbit в тех же условиях — 5мс). И стоит как ракета.
Вы вообще его использовали на практике?
SQS имеет хоть какойто смысл только когда вы лямбда-функции там же пишите.

Плюс к RabbitMQ - есть приоритезация сообщений в очередях;
Минус к Kafka - нет приоритезации сообщений в очередях, надо велосипедить;

И не пора ли добавлять Apache Pulsar к таким сравнениям (или ещё рано)?

В Kafka для этого применяют концепцию dead letter queue — отдельного места для сохранения битых сообщений.

DLQ есть и в кролике.

Более того, в RabbitMQ оно есть из коробки.

А в Kafka его нужно как-то самому велосипедить.

...А еще RabbitMQ может терять сообщения: например, если у него закончились ресурсы при доставке сообщения, то сообщение не доставится, но при этом сервис никому об этом не скажет до тех пор, пока мы не попробуем еще сообщение отправить. И вот если в этот момент сервер "сдохнет" совсем - например, вообще кто-нибудь убьет процесс RabbitMQ - то вот то "подвешенное" сообщение исчезнет совсем, в т.ч. и из базы.

Кажется при нехватке ресурсов любой брокер не может гарантировать сохранность сообщений.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий