Как Kinesis достигает потребительских групп в стиле Kafka? - PullRequest
0 голосов
/ 05 мая 2018

В Кафке я могу разбить свою тему на множество разделов. У меня не может быть больше потребителей, чем разделов в Kafka, потому что раздел используется как способ масштабирования темы. Если у меня больше нагрузки, я могу увеличить количество разделов, что позволит мне увеличить количество потребителей, что позволит мне обрабатывать больше потоков / процессов по заданной теме.

В Кафке существует понятие Consumer Group. Если у нас есть 10 групп потребителей по одной теме, каждая группа потребителей будет иметь возможность обрабатывать каждое сообщение в теме. Группа потребителей по-прежнему использует масштабируемость от разделов (т.е. каждая группа потребителей может иметь до «n» потребителей, где «n» - это количество разделов в теме). В этом прелесть кафки, масштабируемости и многоканального чтения - это две разные концепции с двумя вращающимися ручками.

В Kinesis нам говорят, что если вы используете клиент библиотеки Kinesis, вы можете получить те же функции, что и группы потребителей, определяя различные приложения Kinesis. Другими словами, у нас могут быть разные приложения Kinesis, независимо транслирующие все записи из одного и того же потока в разное время.

Нам также сообщают, что «Клиентская библиотека Amazon Kinesis (KCL) автоматически создает таблицу Amazon DynamoDB для каждого приложения Amazon Kinesis для отслеживания и поддержки информации о состоянии, такой как изменение событий и контрольных точек порядкового номера».

ОК, так что я готовлюсь начать читать код KCL здесь , но я надеюсь, что кто-то может ответить на эти вопросы, чтобы сэкономить мне время.

  1. Как KCL на самом деле делает это?
  2. Есть ли где-нибудь диаграммы, объясняющие процесс?
  3. Если я запустил новое приложение Kinesis (MyKinesisApp1) после того, как запись уже была создана и использована всеми предыдущими приложениями Kinesis, будет ли новое приложение Kinesis (MyKinesisApp1) по-прежнему иметь возможность использовать эту запись? Другими словами, удаляет ли Kinesis запись из своего потока после ее обработки или оставляет ее там на 7 дней, несмотря ни на что?

Я видел этот вопрос здесь , но он не отвечает на мой вопрос. Особенно мой третий вопрос! Кроме того, этот вопрос делает прямое сравнение между двумя похожими технологиями. Это поможет людям, которые знают Кафку, быстрее освоить Kinesis.

1 Ответ

0 голосов
/ 06 мая 2018
  1. В конфигурации KCL есть раздел «appName», который соответствует «Имя приложения» и соответствует «группе потребителей» в Kafka. Для каждой группы потребителей (т. Е. Приложения-потребителя Kinesis Streams) есть таблица DynamoDB. Вы можете увидеть пример DynamoDB здесь (имя приложения KCL - «quickstats-development»): AWS Kinesis leaseOwner путаница

  2. Нет, насколько я знаю, нет. «Kinesis Streams» похож на Kafka, но кроме этого, не так много графического представления.

  3. Да. Каждая группа потребителей Kafka представлена ​​в Kinesis как отдельная таблица DynamoDB. Таким образом, различные потребительские приложения Kinesis могут использовать одну и ту же запись независимо друг от друга. Контрольная точка в Кинезисе - это значение Смещения Кафки. А контрольная точка в DynamoDB является курсором точки чтения в осколке Kinesis. Прочитайте этот ответ для похожего примера: https://stackoverflow.com/a/42833193/1622134

...