Необходимо ли производителю и потребителю указывать раздел

Мы планируем, чтобы производитель (Java rest api) и потребитель (Java-клиент) работали на нескольких машинах, и все потребители принадлежали к одной группе потребителей.

1) В этом случае, если я не укажу раздел во время публикации сообщений производителя, в которых Kafka записывает в случайный раздел / раздел по умолчанию ...

2) Пока потребитель получает сообщения, если я не упоминаю раздел, я просто передаю имя темы .. и фиксирую смещение на сервере Kafka ..

Это хороший подход, если у меня есть одна группа потребителей ???

3) мне нужен прокси-сервер Kafka rest, как я понимаю, это не требуется, поскольку я использую Java-клиент ... пожалуйста, поправьте меня, если я ошибаюсь ... пожалуйста, дайте мне знать, какие преимущества я получу, если у меня есть здесь использовать прокси-сервер Kafka rest ....


person shiv455    schedule 24.02.2016    source источник


Ответы (1)


С точки зрения производителя, если у записи нет ключа, производитель вставит записи циклически между разделами в теме. С точки зрения потребителя вам не нужно указывать раздел, если какой-либо потребитель может обрабатывать любую запись из этой темы, если вы действительно хотите, вам даже не нужно фиксировать смещение, клиент может сделать это за вас с помощью auto.commit.enable=true.

Да, если у вас есть 1 группа потребителей, вы можете добавить несколько потребителей и сбалансировать нагрузку между группами (это зависит от количества потребителей в группе и количества разделов).

3) Вам не нужен прокси-сервер kafka rest при использовании java-клиента, кроме того (если я не ошибаюсь), прокси-сервер kafka rest зависит от реестра схемы, поэтому вам придется запускать оба.

person Nautilus    schedule 24.02.2016
comment
1) в моем случае я должен выполнить фиксацию вручную, потому что я хочу зафиксировать только тогда, когда сообщение будет успешно обработано ... автоматическая фиксация будет зафиксирована, как только потребитель прочитает сообщение ... исправьте меня, если я ошибаюсь ... 2) может Я упоминаю разделы в Kafka заранее, исходя из количества потребителей, которые у меня есть ... если да, то как 3) я могу использовать несколько потоков в каждом потребителе для чтения и обработки сообщений, чтобы я мог обрабатывать больше сообщений, чем одно сообщение для каждого потребителя .. .в этом случае есть ли проблема при установке смещения ??? - person shiv455; 24.02.2016
comment
в группе потребителей каждый потребитель имеет свои собственные разделы, поэтому фиксация смещения всегда должна быть безопасной, вам нужно создать 1 поток для каждого потребителя, а не разделять потребителя между потоками. Просто выполните синхронизацию вручную или асинхронно и отключите автоматическую фиксацию. - person Nautilus; 24.02.2016
comment
Хотел бы знать, почему мы не должны создавать несколько потоков в потребителе ... в любом случае Kafka рассматривает даже поток как потребитель и выполняет перебалансировку разделов ... Я имею в виду, если у меня есть 4 раздела и 2 потребителя ... и если у меня есть 2 потока в каждый потребитель ... итого 4 потока, и Kafka назначает каждый раздел каждому потоку ... поправьте меня, если я ошибаюсь ... причина, по которой я настаиваю на нескольких потоках, заключается в том, что я могу обработать 4 сообщения, даже если у меня есть два потребителя ... пожалуйста, дайте мне знать, есть ли в этом подходе какие-либо узкие места ... потому что, если я хочу обрабатывать 20 сообщений за раз, мне нужно создать 20 потребителей - person shiv455; 24.02.2016
comment
причина в том, что новый потребитель является однопоточным. Если вы хотите узнать о нем больше, вы можете прочитать этот блог confluent.io/blog/ - person Nautilus; 24.02.2016
comment
Я говорю, что потребитель - это приложение и создам несколько потоков для создания нескольких объектов Kafkaconsumer, и все работает в отдельном потоке ... см. stackoverflow.com/questions/32470720/ < / а> - person shiv455; 24.02.2016
comment
Вы спросили меня: почему мы не должны создавать несколько потоков в потребителе, поэтому я указываю вам на эту документацию. Да, вы можете создать 1 поток для каждого потребителя и запустить несколько потоков, что нормально, потому что потребитель будет однопоточным внутри этого потока и должен будет иметь другой идентификатор клиента клиента, чем остальные потоки. - person Nautilus; 24.02.2016
comment
Итак, что меня немного беспокоит, так это в этом случае. Будет ли проблема с выделением разделов, когда один из потоков сломан ... если нет, пожалуйста, направьте меня к любому образцу, в котором многопоточный подход обрабатывается аккуратно ... это было бы действительно полезно !! - person shiv455; 24.02.2016
comment
Если один из потребителей в группе потребителей умирает, разделы, назначенные этому потребителю, будут перераспределены между активными потребителями, поэтому все разделы всегда потребляются, пока у вас есть хотя бы 1 живой потребитель в группе потребителей. - person Nautilus; 26.02.2016
comment
Итак, предположим, что я создаю 3 потока в одном потребителе (потребительском приложении), каждый поток будет рассматриваться как потребитель ??? И ребалансировка происходит между ними при обрыве одного потока ?? - person shiv455; 26.02.2016