Последнее значение, соответствующее каждому ключу, отправленному в теме Kafka

У нас настроена тема Kafka, в которой мы публикуем сводные отчеты по каждой акции, которой мы торговали в течение дня. Например Акция А - Покупка-50, Продажа-60, Акция Б - Покупка-44, Продажа-34 и т.д. Ключом при публикации является RIC код акции.

На следующий день я хочу, чтобы все потребители получили последние опубликованные позиции по каждой акции в отдельности. Я хочу понять, как настроить производителя/потребителя Kafka для достижения такого поведения.

Одна вещь, которая приходит на ум, — это создание раздела для каждой акции, это приведет к индивидуальным смещениям для каждой акции, и все потребители смогут указать на САМОЕ ВЫСОКОЕ смещение и получить последнюю позицию.

Это правильный подход или я упускаю что-то очевидное?


person Bhushan    schedule 24.04.2017    source источник
comment
Я думаю, что другой вариант — указывать случайный идентификатор потребителя каждый раз, когда потребитель подключается, это заставит Kafka возвращать все последние значения для всех ключей.   -  person Bhushan    schedule 25.04.2017


Ответы (1)


Ваш подход будет работать, но только в том случае, если вы не слишком заботитесь о временных границах — например, вам не нужно получать счетчики за каждый день отдельно, со строгим требованием, чтобы только события, которые произошли между, скажем, [01 /25/2017 00:00 - 26/01/2017 00:00] необходимо учитывать.

Если вам нужно строго подсчитывать количество в день, вы можете попробовать использовать Kafka Streams с ключом RIC и окном, установленным на 24 часа на основе метки времени события.

Это всего лишь еще один способ сделать это — я уверен, что есть и другие подходы!

person Marina    schedule 24.04.2017
comment
Спасибо @Marina за то, что поделились советом о потоках Kafka, у нас нет ограничений по времени. Просто нужно использовать последнее известное состояние каждого RIC. Можно ли этого добиться, используя только один раздел? - person Bhushan; 25.04.2017
comment
если вас не интересуют временные рамки и вас интересует только последнее состояние - я бы просто использовал локальный кеш в ваших потребителях, поддерживаемый Redis или Postgres, для хранения этой информации и продолжал обновлять ее по мере получения событий от Kafka. Kafka отлично подходит для масштабируемого и очень быстрого перемещения событий - на самом деле он не предназначен для использования в качестве хранилища для выполнения запросов к.... - person Marina; 25.04.2017
comment
Да, это другой подход, хотя меня беспокоит этот подход: 1. Другое состояние, которое нужно поддерживать 2. Дополнительное оборудование 3. IO может быть узким местом. В идеале я бы хотел, чтобы kafka предоставила мне последнее значение для каждого ключа. - person Bhushan; 26.04.2017