В Go появилась новая библиотека для написания приложений с распределенной потоковой обработкой, поддерживающих их данными в Kafka. GoKa стремится упростить создание высокомасштабируемых и высокодоступных микросервисов.
Kafka — это проект Apache, который можно использовать для создания конвейеров данных в реальном времени и потоковых приложений. Он горизонтально масштабируемый, отказоустойчивый, быстрый и работает в тысячах компаний. Goka использует Kafka для передачи сообщений, отказоустойчивого хранилища состояний и разделения рабочей нагрузки.
Goka связывает таблицу состояний с группами потребителей Kafka и сохраняет их в Kafka. Таблица группы Гока представляет состояние группы. Микрослужба изменяет и обслуживает содержимое таблицы, используя два дополнительных типа объектов: процессоры и представления.
Процессор — это набор функций обратного вызова, которые изменяют групповую таблицу при поступлении сообщений. Процессоры также могут отправлять сообщения в другие темы. Goka распределяет разделы входных тем по всем экземплярам процессоров в группе процессоров, чтобы обеспечить масштабирование и отказоустойчивость. Если экземпляр процессора выходит из строя, его разделы и состояние переназначаются оставшимся работоспособным членам группы процессоров.
Представление — это постоянный кэш групповой таблицы, который подписывается на обновления всех разделов групповой таблицы и поддерживает синхронизацию локального дискового хранилища с темой группы. Представления предоставляют доступ только для чтения к групповым таблицам и могут использоваться для предоставления внешних сервисов.
Эмиттеры доставляют сообщения типа «ключ-значение» в Kafka. В документации используется пример обработчика базы данных, отправляющего изменения состояния в Kafka для использования другими заинтересованными приложениями.
Goka обрабатывает весь ввод и вывод сообщений. Вы предоставляете одну или несколько функций обратного вызова, которые обрабатывают сообщения из любой интересующей вас темы Kafka, а затем можете работать только с десериализованными сообщениями.
Goka находится на GitHub с примерами и хорошей документацией.