Как стать автором
Обновить

Как мы построили корпоративную шину данных на Kafka, которая обрабатывает до 3 млн сообщений в секунду

Время на прочтение10 мин
Количество просмотров30K
Всего голосов 30: ↑29 и ↓1+35
Комментарии14

Комментарии 14

Интересно наблюдать, как история движется по спирали. От ESB к изолированным независимым микросервисам и обратно к ESB.

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

данные отдаются в JSON

А почему не AVRO? И компрессию используете ли какую-нибудь?

Сжатый JSON,а сжатие поддерживается кафкой нативно, не самый плохой двоичный формат. Плюс, для интеграционной шины низкий порог входа - читабельные сообщения - важнее каких-то процентов эффективности.

Если имелось в виду читаемые человеком, так с AVRO все будет в порядке — тулзы типа Kowl или Kafka-UI подтянут все со schema registry автоматически. Плюс, если мы говорим про SQL-like процессоры типа Lenses.io, чтобы спросить определенные данные с топика — SQL там будет типизованный, очень удобно.

забавно. Мне год назад активно слили карму за комментарий, что ПР претерпела серьезнейшие изменения.

Людям не объяснить, они будут продолжать думать так, как хотят

У вас удивительно бесполезный комментарий. Перефразируя:

  • Мне год назад слили карму за <ищите сами за что>

  • Люди тупые

вы статью, которую комментируете читали? Или вам незнакома аббревиатура "ПР"? Это Почта России

Большинство до сих пор думает, что ПР это такая отсталая структура, без автоматизации и со счЁтами

Или вам незнакома аббревиатура "ПР"? Это Почта России

Это совсем не очевидно. Ни разу в жизни не встречал такой аббревиатуры.

А сколько максимально могут выдержать ваши 12 серверов сообщений в секунду?

3 млн это какая загруженность ваших серверов? (процессоры / оперативка)

И у вас данные на диски сохраняются? Диски SSD M.2? Какая скорость чтения\записи у них и влияет ли это на производительность вашей шины в такой реализации? Или все в оперативке хранится, и от дисков ничего не зависит?

Интересно, какая latency на доставку сообщений под нагрузкой?
(сарказм: надеюсь не как у посылок и писем?)

а почему не написать с нуля на го? Быстрее взять готовый вариант и разобраться в нём? Этот момент вообще не рассмотрен в статье, нет сравнения между сделать своё и взять готовое.

Дополнительный слой для работы с большими данными. Тесты показали, что сообщения больше мегабайта критически роняют перформанс Kafka

а почему падает производительность?

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

опять же) а почему не сделать свой кэш или ОС хорошо кэширует?

Мы пробовали запускаться на виртуальных серверах. Скажу честно, получилось не очень. И дело даже не в CPU, а вот в чём:

  • Появляется latency на память.

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

Xms24G -Xmx24G -XX:MetaspaceSize=96m -XX:+UseG1GC 

Вот тут вопрос возник: с какой целью такой объем по heap?
И сколько при этом у вас выделено под page cache?

На практике да и по рекомендации confluent:

"Kafka uses heap space very carefully and does not require setting heap sizes more than 6 GB"

В целом выглядит так как будто вы не поняли как работает Kafka.
Возможно я не прав, поправьте. :o)

Приношу извинения, статью прочел в момент выхода, а вот когда писал коментарий не освежил в памяти. Изменить уже не могу.

Но любопытство насчет 24Gb heap все еще актуально. 8)

>Заметьте, мы используем G1 GC, а не стандартный garbage collector.

Так G1 и есть стандартный. Уже довольно давно. Или Kafka только на Java 8 умеет?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий