Планирование мощностей Кафки

У моего работодателя есть кластер Kafka, который обрабатывает ценные данные. Можно ли как-то понять, на какой процентной мощности работает наш кластер? Может ли наш кластер обрабатывать большие объемы трафика? Можем ли мы выжить в течение часа или дня, если один узел выйдет из строя?

1 ответ

Решение

Я не совсем уверен, что вы имеете в виду, поэтому я буду широко распространяться.

Под пропускной способностью вы подразумеваете"будет ли мой кластер Kafka хранить все мои журналы?". Это функция:

Если у вас есть 2-недельный срок хранения, без сжатия журнала (когда сообщение исчезло, оно исчезло), без сжатия журнала, и в течение этих двух недель вы ожидаете отправки 10000 сообщений (в течение этих 2 недель), которые имеют размер 1 КБ и реплицируется 3 раза... лучше иметь 30000 КБ памяти или 30 МБ.

Что касается дальнейших вычислений, размера вашего кластера и количества машин, которые могут выйти из строя до того, как у вас возникнут проблемы, дисковое пространство, ввод-вывод, и тому подобное, вот несколько замечательных ссылок на эту тему:

Если под пропускной способностью вы имеете в виду: "Сколько трафика Kafka может обрабатывать мой кластер Kafka, то есть" физические "ящики в моем дескрипторе кластера Kafka?": То есть как быстро Kafka может хранить данные на ваших ящиках, тогда это другой вопрос. Если вам интересно (например), какие типы экземпляров AWS наиболее быстры для обработки данных Kafka, или сколько памяти выделено для JVM / что еще можно запустить на этом брокере, тогда это хорошо.

Здесь стоит отметить, что с точки зрения Unix, чем больше свободной памяти у вас на коробке, тем больше ядро ​​Unix может использовать для файлового кэша(поэтому не просто наивно передавайте все это JVM;)). И тип / емкость сетевой карты тоже очень важен.

Здесь есть пара интересных вещей:

С идеей этого теоретического максимума ("больше, чем вам когда-либо понадобится"), вероятно, стоит протестировать ваших индивидуальных брокеров / установку. Либо с помощью Ranger, аналогичного инструмента, либо просто добавьте в него тонну реальных данных (возможно, одновременно тестируя ваш конвейер данных, переходя к моей следующей точке...)

Если под емкостью вы подразумеваете: "Сколько времени, среднего или среднего времени требуется, чтобы сообщение проходило через мой конвейер данных, передавалось в Kafka, использовалось микросервисом, преобразовывалось, создавалось в новую тему, снова использовалось…" И, в конце концов, приземлиться в конце микросервисного кластера / конвейера данных? "

Это функция вокруг:

  • сколько вы можете разделить данные
  • если в вашей группе потребителей достаточно потребителей для обработки всех разделов
  • сколько времени занимает каждая микросервисная обработка

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

Разным микросервисам потребуется разное время для обработки своего сообщения. Если у вас есть идентификатор трассировки, вы можете сделать что-то интересное, например, попросить каждую микросервисную запись в теме Kafka о том, сколько времени потребовалось текущей службе для обработки текущего сообщения. (Примените больше Кафки к вашей проблеме Кафки!). Или попросите каждую тему написать в хранилище данных поиска с небольшим TTL для данных: например, использование Elasticsearch для запроса последних данных Kafka, чтобы вы могли получать результаты поиска по темам, - это интересный трюк, который я видел. Затем вы можете увидеть, что microservice 5 работает медленно, и вам нужно потратить некоторое время на его настройку.

Редактировать: Вам также может повезти, отслеживая производственный процесс с помощью инструмента LinkedIn Burrow для Kafka (который, похоже, все еще активно занимается любовью в 2017 году), который будет следить за тем, не отстают ли ваши потребители, наряду с другими вещами.

Надеюсь, это поможет. Это, к сожалению, более широкий вопрос, который появляется на поверхности. В конечном счете, это зависит от% дискового пространства, % CPU и% от того, что ваши SLA находятся вокруг конвейера данных... и это иногда сводится к уникальным факторам, таким как размер вашего сообщения, какие машины вы хотите или хотите запустить, и как быстро ваши микроуслуги. Технология Kafka может обрабатывать невероятное количество трафика: LinkedIn - не маленький сайт, а Kafka используется некоторыми из наиболее посещаемых сайтов в Интернете. Хорошо сконструированный брокерский кластер должен быть в состоянии справиться с тем, что вы бросаете в него, теоретически. Практические части - когда дело доходит до вашего рабочего процесса, каковы ваши требования, что вы на самом деле делаете с этим и т. Д. И т. Д.

Другие вопросы по тегам