Работа с большой темой Кафки - PullRequest
0 голосов
/ 11 июня 2019

У меня очень очень большая (кол-во сообщений) тема Кафки, она может иметь более 20 МБ сообщений в секунду, но размер сообщения небольшой, это просто какой-то простой текст, каждый размером менее 1 КБ, я могу использовать несколько разделов по теме, а также я могу использовать несколько серверов для работы над одной темой, и они будут использовать один из разделов в теме ... Что делать, если мне нужно +100 серверов для огромной темы?

Логично ли создавать +100 разделов или более по одной теме?

Ответы [ 3 ]

2 голосов
/ 11 июня 2019

Вы должны определить «большой» при упоминании тем Kafka:

  • Большой означает огромные данные с точки зрения размера тома.
  • Размер сообщения велик, так как для отправки сообщения требуется времяиз очереди в клиент для обработки?
  • Интенсивная запись в эту тему?В таком случае нужно ли обрабатывать чтение максимально быстро?(то есть: можем ли мы отложить обработку данных примерно на 1 час)
  • ...

В любом случае вам следует лучше подумать на стороне потребителя для лучшего дизайна темы и раздела,Например:

  • Время обработки каждого сообщения медленное, и оно лучше обрабатывает между сообщениями: в этом случае вам нужно создать много разделов.Это похоже на балансировщик нагрузки и связь с сервером, вы создаете много рабочих для выполнения своей работы.
  • Если обработка сообщений выполняется только для некоторых типов, время медленное, вам следует подумать о переходе на новую тему.Есть хорошая статья: Если вы поместите несколько типов событий в одну и ту же тему Кафки объясняет это решение.
  • Важен ли порядок сообщений?например, сообщение A происходит перед сообщением B, сообщение A должно быть обработано в первую очередь.В этом случае вы должны отправлять все сообщения одного типа в один и тот же раздел (только один и тот же раздел может поддерживать порядок сообщений) или перемещаться в отдельную тему (с одним разделом).
  • ...

После того, как вы правильно разработали тему и раздел, возникает вопрос: сколько разделов должно быть у вас для каждой темы.Увеличение общего количества разделов увеличит вашу пропускную способность, но в то же время это повлияет на доступность или задержку.Есть хорошая тема , как выбрать количество тем и разделов для кластера Kafka , в которой подробно объясняется, что общее количество разделов на тему влияет на производительность.На мой взгляд, вы должны провести эталонный тест непосредственно в вашей системе, чтобы выбрать правильное значение.Это зависит от многих факторов вашей системы: вычислительной мощности сервера, емкости сети, памяти ...

И, наконец, вам не нужно 100 серверов на 100 разделов.Кафка попытается сбалансировать все разделы между серверами, но это просто необязательно.Например, если у вас есть 1 раздел с 7 разделами, работающими на 3 серверах, на 2 серверах будет храниться по 2 раздела каждый, а на 1 сервере будет храниться 3 раздела.(так 2 * 2 + 3 * 1 = 7).В более новой версии Kafka отображение между разделом и информацией о сервере будет храниться на zookeeper.

0 голосов
/ 24 июня 2019

Наши друзья были правы, я отсылаю вас к этой книге

Кафка, полное руководство Неха Нархеде, Гвен Шапира и Тодд Палино

Вы можете найти ответ на странице 47

Как выбрать количество разделов

Есть несколько факторов, которые следует учитывать при выборе количества Перегородки:

  • Какую пропускную способность вы ожидаете достичь для темы?

    Например, ожидаете ли вы писать 100 КБ в секунду или 1 ГБ на второй

  • Какую максимальную пропускную способность вы ожидаете достичь при использовании одного раздела? У вас всегда будет максимум один потребитель чтение из раздела, так что если вы знаете, что ваш медленный потребитель записывает данные в базу данных, и эта база данных никогда не обрабатывает больше чем 50 МБ в секунду из каждого потока, записывающего в него, то вы знаете, Вы ограничены пропускной способностью 60 МБ при использовании из раздела.
  • Вы можете выполнить то же упражнение, чтобы оценить максимальную пропускную способность на одного производителя для одного раздела, но так как производители как правило, гораздо быстрее, чем потребители, обычно безопасно пропустить это.
  • Если вы отправляете сообщения в разделы на основе ключей, добавление разделов позже может быть очень сложным, поэтому рассчитайте пропускную способность на основе вашего ожидаемого будущего использования, а не текущего использования.
  • Учитывайте количество разделов, которые вы разместите на каждом посреднике, а также доступное дисковое пространство и пропускную способность сети для каждого посредника.
  • Избегайте переоценки, так как каждый раздел использует память и другие ресурсы посредника и увеличивает время для лидера. выборы. Учитывая все это, ясно, что вы хотите много разделов но не слишком много. Если у вас есть некоторая оценка относительно целевая пропускная способность темы и ожидаемая пропускная способность Например, вы можете разделить целевую пропускную способность на ожидаемую sumer пропускная способность и таким образом вывести количество разделов. Так что если я хочу иметь возможность писать и читать 1 ГБ / сек из темы, и я знаю каждый потребитель может обрабатывать только 50 МБ / с, тогда я знаю, что мне нужно по крайней мере 20 перегородки. Таким образом, у меня может быть 20 потребителей, читающих из темы и достичь 1 ГБ / сек. Если у вас нет этой подробной информации, наш Опыт показывает, что ограничение размера раздела на диск менее 6 ГБ в день хранения часто дает удовлетворительное Результаты.
0 голосов
/ 12 июня 2019

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

в целом Кафка довольно мощный и отстает от сеансовон записывает данные в буфер и периодически сбрасывает данные на диск.и в соответствии с тестом, проведенным некоторое время назад слияниями, кластер Kafka с 6 узлами поддерживает около 0,8 миллиона сообщений в секунду, как показано ниже: * отметка в тесте pic enter image description here

...