у нас есть 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
это не видно из этого графика, но во время высокой загрузки% существуют периоды времени, в которые записи равны 0, и мы предполагаем, что в это время производитель инжекторов имеет их очередь заполняется и, таким образом, выдает ошибку «Очередь заполнена».
Стоит отметить, что мы используем планировщик ввода-вывода дедлайн в машинах kafka, который отдает приоритет операциям чтения.
У нас есть несколько соображений о том, как снять давление при записи:
- для уменьшения ненужных iops - измените конфигурацию дисков kafka с raid10 на non-raid ("jbod")
- , чтобы распространить чтение - заставить приложения spark читать с kafka в разное время и не просыпаться в одно и то же время
- , чтобы изменить приоритет записи и чтения; - изменить планировщик ввода-вывода на CFQ
Я пишу это вопрос, чтобы убедиться, что мы на правильном пути, и, действительно, hault пишет во время чтения из-за raid10, планировщика ввода-вывода дедлайна и слишком большого числа операций чтения одновременно.
что вы думаете?