Микросервисы и Kafka: объединять или не объединять

У меня проблема с мыслями о возможной нормальной настройке микросервисов и Kafka, которые мы сейчас настраиваем.

У нас есть одна тема в Kafka, и несколько потребителей читают эту тему через отдельные группы потребителей. Но почему-то я думаю, что это может привести к объединению в терминах микросервисов, поскольку у нас есть два потребителя, читающих точные данные из одной и той же темы. Кроме того, у нас нет срока хранения для сообщений, и поэтому я рассматриваю Kafka как своего рода хранилище данных. Поэтому я думаю, что нам лучше скопировать сообщения в отдельную тему для другой службы / потребителя.

У нас разные мнения о том, как это связано или развязано, и я хотел бы услышать ваше мнение о том, что я делаю неправильно, потому что я чувствую, что делаю это. Спасибо за Вашу поддержку!


person gooby    schedule 12.05.2017    source источник


Ответы (1)


На мой взгляд, использование темы Kafka для нескольких сервисов или приложений является правильным подходом, если ваши сервисы не полагаются на нее повторно. Это означает, что служба должна один раз прочитать очередь, преобразовать данные во все, что ей требуется, и при необходимости сохранить их сама. Таким образом, тема становится не постоянным хранилищем данных, а скорее независимым способом ввода данных (как если бы вы вызывали службу напрямую с этими raw данными, но в более независимой манере, позволяя службе читать тему. всякий раз, когда будете готовы к этому с любой необходимой частотой). Это увеличивает устойчивость вашей системы в целом.

И есть связь, то есть raw данные. Но с моей точки зрения, для нескольких сервисов совершенно нормально понимать один и тот же формат данных (в теме) - если его формат в основном стабильный. Предполагается, что это raw данные, которые каждая служба должна преобразовать в форму, полезную для себя. Вам просто нужно убедиться, что формат данных raw правильно версируется, когда требуются изменения. А чтобы сервисы продолжали работать, вам, возможно, придется доставлять несколько версий одновременно, пока все сервисы не будут поддерживать последнюю версию. Этот тип архитектурного стиля используется во многих крупных системах и работает до тех пор, пока у вас нет сценария, в котором вам нужно требовать, чтобы формат данных raw очень часто изменялся таким образом, чтобы он несовместим с вашими проектами сервисов. (Если бы это было так, вам, вероятно, понадобится еще один уровень стабильной метамодели ниже, который может описывать динамические необработанные данные.)

person Oswin Noetzelmann    schedule 12.05.2017
comment
Спасибо за ваш вклад! Это одно из мнений, которые мы обсуждали. Поскольку мы используем некоторые необработанные данные в форме обобщенного json, я думаю, это было бы хорошо, поскольку каждая потребляющая служба могла бы анализировать сообщение по мере необходимости. Так что у меня, вероятно, была неправильная точка зрения на kafka как на своего рода хранилище данных, и я не учитывал версии данных сообщений. - person gooby; 12.05.2017
comment
Да, есть люди, которые `` злоупотребляют '' Kafka в качестве хранилища данных, и это может иметь смысл для определенных случаев использования (например, резервное копирование данных биржевых тиков), но в большинстве случаев вы, вероятно, захотите использовать базу данных какого-либо типа . - person Oswin Noetzelmann; 12.05.2017