Понимание некоторых концепций и интеграции Hazelcast Jet с Kafka

Я пытаюсь сопоставить некоторые концепции между Spark Structured Streaming и Hazelcast Jet, а также разбираться в других предметах.

Q1 - В Spark каждый раздел Kafka станет разделом внутри Spark, затем они будут обрабатываться отдельными задачами параллельно. Я думаю, что где-то читал, что Hazelcast Jet объединит все сообщения от kafka независимо от разделов group.id и topic, это правильно?

Q2 - Как нам увеличить количество «потребителей» в программе Jet, чтобы увеличить пропускную способность, потребляющую от кафки? В Spark, я думаю, нам нужно только увеличить количество тематических разделов, чтобы назначить новую задачу Spark для нового раздела.

Q3 - Если Q1 выше верно, возможно ли избежать этого слияния и распределения разделов kafka для параллельной обработки? После того, как сообщения будут уже сгруппированы и упорядочены в разделе kafka, объединение всех сообщений подразумевает дополнительную обработку для повторного разделения и повторной сортировки сообщений.

Q4 - Как определяется номер каждой вершины? Я имею в виду, что в примере подсчета слов у нас есть токенизатор и аккумулятор, как Jet будет определять / делить количество процессоров для создания экземпляров токенизатора и аккумулятора?


person Kleyson Rios    schedule 22.01.2018    source источник


Ответы (1)


A1 - количество параллельных процессоров полностью не зависит от количества разделов Kafka. Количество процессоров определяется локальный параллелизм вершины и количество членов:

totalParallelism = numberOfMembers * localParallelism

Каждому процессору будет назначено подмножество всех тематических разделов, и он будет использовать один KafkaConsumer. group.id не используется, Jet использует ручное назначение разделов.

A2 - Добавление новых разделов в тему Kafka не увеличивает количество потребителей. Вам нужно увеличить локальный параллелизм.

A3 - Нет дополнительных затрат на «слияние» и «сортировку». Вы можете посмотреть здесь . Обычно каждая вершина поддерживается несколькими параллельными процессорами, а каждое ребро поддерживается несколькими очередями, по одной очереди на каждые два процессора. Если нижестоящий процессор берет элементы из нескольких очередей, он просто делает это очередь за очередью; нет дополнительных затрат на слияние. Также нет сортировки в том смысле, что элементы переупорядочиваются. Если край не распределено, вся обработка выполняется локально и ничего не сериализуется.

Ответ действителен для Jet 0.5.1 и 0.6 (который находится в разработке на момент написания).

A4 - см. A1.

person Oliv    schedule 23.01.2018
comment
Спасибо @Oliv. В долго работающем приложении, таком как бесконечный потребитель потоковой передачи, возможно ли переопределить (увеличить или уменьшить) на лету количество параллельных вершин (totalParallelism = numberOfMembers * localParallelism)? Я имею в виду, что в случае присоединения новых участников к кластеру, могу ли я переопределить параллелизм моего приложения без выключения и запуска его снова? - person Kleyson Rios; 24.01.2018
comment
Поскольку локальный параллелизм устанавливается в соответствии с количеством ядер ЦП, нет никакой выгоды от его увеличения. - person Marko Topolnik; 25.01.2018
comment
@KleysonRios Нет, это невозможно. Параллелизм можно изменить только после перезапуска задания. Однако Jet 0.5 (и, вероятно, 0.6) не имеет API для перезапуска задания вручную. Вы можете только отменить задание, но вы потеряете состояние. - person Oliv; 26.01.2018
comment
@Oliv это немного странно в том смысле, что я могу присоединяться к новым узлам в кластере, но мое приложение не может масштабироваться без его остановки, потери всех состояний и повторного запуска. Как клиенты Jet справляются с этой потребностью? - person Kleyson Rios; 26.01.2018
comment
@MarkoTopolnik Я согласен с тем, что увеличение localParallelism не приведет к увеличению производительности, но увеличение numberOfMembers дает. - person Kleyson Rios; 26.01.2018
comment
@KleysonRios автоматически масштабируется при добавлении новых узлов в версии 0.6 или 0.7. А пока вы можете отменить и повторно отправить задание вручную. - person Can Gencer; 26.01.2018