Как Kafka справляется с потребителем, который работает медленнее, чем другие потребители?

Допустим, у меня 20 разделов и пять рабочих. Каждому разделу назначается рабочий. Однако один рабочий работает медленнее, чем другие машины. Он все еще обрабатывается (то есть не медленный потребитель, описанный здесь), но с частотой 60 % по сравнению с другими машинами. Это может быть связано с тем, что рабочий работает на более медленной виртуальной машине на AWS EC2, сломанном диске или процессоре или еще что-то. Хорошо ли Kafka справляется с перебалансировкой, чтобы уменьшить количество разделов для медленного рабочего процесса?


person Ztyx    schedule 04.12.2015    source источник


Ответы (1)


Kafka на самом деле не заботится о том, как быстро потребляются сообщения. Он даже не связан с тем, сколько потребителей или сколько раз прочитано каждое сообщение. Kafka просто фиксирует сообщения в разделах и устаревает в настроенное время.

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

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

Чтобы лучше сбалансировать обработку сообщений, вы должны исключить чтение сообщений из обработки сообщений — что-то вроде потоковой модели Storm. Вам по-прежнему придется программно отслеживать невыполненные работы в логике обработки, но у вас будет возможность перемещать работу на более быстрые узлы, чтобы сбалансировать работу.

person Chris Gerken    schedule 06.12.2015