Как я могу использовать данные последовательно (в порядке их отметки времени) из многораздельной темы Kafka

Я знаю, что Kafka не сможет гарантировать упорядочение данных, если тема имеет несколько разделов. Но моя проблема заключается в следующем: - Мне нужно иметь несколько разделов для темы события (действия пользователя, генерирующие события), поскольку я хочу, чтобы несколько групп потребителей потребляли данные из темы. Но бывают случаи, когда мне нужно загрузить все данные, то есть прочитать полные данные от начала до конца и перестроить свой график событий из исторических сообщений в Kafka, а затем я теряю порядок, который создает проблему. Один из подходов может заключаться в обработке его в парадигме Map-Reduce, где я сопоставляю данные по времени, упорядочиваю их и использую. Есть ли кто-нибудь, кто сталкивался с подобной ситуацией / проблемой и хотел бы помочь мне с правильным подходом / решением?

Заранее спасибо.


person Vikram    schedule 09.03.2017    source источник
comment
I need to have multiple partitions to an event topic(user activities generating events) since I want multiple consumer groups to consume the data from the topic Небольшое замечание, нет необходимости иметь несколько разделов для поддержки групп потребителей, разделы необходимы только в том случае, если вам нужно более одного потребителя на группу потребителей. У вас может быть столько групп потребителей на раздел, сколько вам нужно.   -  person Sönke Liebau    schedule 09.03.2017
comment
О, да. О чем я вообще думал. Мне определенно нужно еще раз просмотреть документацию Kafka. Спасибо большое за вашу помощь !!   -  person Vikram    schedule 09.03.2017
comment
Еще один комментарий: гарантия заказа Kafka рассчитана на смещение, а не на временную метку. Таким образом, вы можете читать данные, упорядоченные по метке времени, только если метка времени возрастает, но на это нет никаких гарантий. По умолчанию производитель устанавливает метку времени для сообщения, и поэтому, даже если у вас один раздел, но несколько производителей, данные могут быть записаны не в порядке меток времени. Если вам нужно гарантировать, что временные метки также упорядочены для каждого раздела, вы все равно можете изменить настройку брокера / темы с CREATE_TIME на LOG_APPEND_TIME, но это, конечно же, изменит семантику ваших временных меток.   -  person Matthias J. Sax    schedule 09.03.2017
comment
stackoverflow.com/questions/39574328/   -  person Dmitry Minkovsky    schedule 25.01.2018


Ответы (1)


Согласно документации kafka, глобальное упорядочение по разделам не гарантируется, поэтому вы можете создать N разделов с N количеством потребителей. Создавайте разделы на основе типа данных, то есть все типы данных категории A должны помещаться в один раздел, поскольку порядок сообщений, поддерживаемых в разделе, вы можете использовать эти сообщения в отдельных потребителях и данных процесса.

Я просмотрел несколько блогов, в которых говорится о буферизации этих сообщений и применении логики сортировки к этим сообщениям, но это не кажется хорошей практикой, поскольку один из разделов может быть медленным, сообщение в некоторых случаях задерживается, и вам нужно отсортировать свои сообщения как и когда приходит каждое новое сообщение.

person Amol Suryawanshi    schedule 25.06.2018