kafka диски hault пишет во время массовых чтений и вызывает ошибки "очередь заполнена" в производителе kafka - PullRequest
7 голосов
/ 27 февраля 2020

у нас есть 6 брокеров X kafka с 256 ГБ ОЗУ, 24c / 48T и на них установлены диски XAS 10 Кбит / с 20 X 1,8 ТБ, настроенные в raid10.

Есть два приложения для потоковой передачи с поддержкой искры, которые

  • запускают свои партии каждые 10 минут
  • как только они начинают, их первая работа - чтение с того же самого kafka topi c.
  • , что topi c имеет 200 разделов, равномерно распределенных по 6 брокерам (33 раздела на каждого брокера).
  • потоковые приложения используют клиент kafka 0.8.2.1 для получения от kafka

Существует 21 экземпляр инжекторов, которые непрерывно записывают в эту топику c со скоростью 6 тыс. Событий / с. c. они используют librdkafka poroducer для создания событий для kafka.

, когда просыпаются потоковые приложения, их первая работа - чтение из topi c. как только они это делают,% util на дисках kafka становится равным 90-100% в течение 30 сек c -60 сек c, и в то же время все экземпляры инжектора получают ошибки "Очередь заполнена" от их кафки режиссер. это конфигурация производителя:

  • queue.buffering.max.kbytes: 2097151
  • linger.ms: 0,5

enter image description here

это не видно из этого графика, но во время высокой загрузки% существуют периоды времени, в которые записи равны 0, и мы предполагаем, что в это время производитель инжекторов имеет их очередь заполняется и, таким образом, выдает ошибку «Очередь заполнена».

Стоит отметить, что мы используем планировщик ввода-вывода дедлайн в машинах kafka, который отдает приоритет операциям чтения.

У нас есть несколько соображений о том, как снять давление при записи:

  • для уменьшения ненужных iops - измените конфигурацию дисков kafka с raid10 на non-raid ("jbod")
  • , чтобы распространить чтение - заставить приложения spark читать с kafka в разное время и не просыпаться в одно и то же время
  • , чтобы изменить приоритет записи и чтения; - изменить планировщик ввода-вывода на CFQ

Я пишу это вопрос, чтобы убедиться, что мы на правильном пути, и, действительно, hault пишет во время чтения из-за raid10, планировщика ввода-вывода дедлайна и слишком большого числа операций чтения одновременно.

что вы думаете?

...