На этом месте вам вынесет мозг, у кого он ещё остался, после безумий этого года. Мне вынесло.
Текст родился из озарения – когда я готовил видео об истории колониализма, в котором хозяевами морей вдруг стали голландцы.
Технологически, а мы на технологической площадке, все дело во флейтах. И, поняв это, я вдруг осознал, что флейты и их успех очень похожи на kafka и её успех.
Так, дабы не убить окончательно неокрепшие умы: что есть флейт?
Флейт это такой тип морского судна XVI-XVIII веков: плавучий склад с глубоким трюмом и почти плоским днищем. Довольно длинный, в 4-6 раз длиннее ширины. Мачты разнесены по краям, чтобы дать место грузовому люку. А еще этот грузовичок оснастили кучей лебедок, дабы экономить на матросах.
Почему мне флейт кажется похож на KAFKA?
А вот почему:
Тягает много байтов (суперсила – перенести много бочек задешево):
Флейт - Так как у этой лоханки ширина корпуса была почти одинаковой от носа до кормы, то у корабля такого типа выходил более просторный трюм. Если сравнивать его с другими кораблями того времени, сужающимися от средней части к носу и корме. А кроме этого, в отличии от прочих тогдашних морских судов: каравелл, каракк и галеонов, от сплошной средней палубы отказались в пользу грузоподъемности. То есть, открывай люк в центре и набивай трюм бочками, будто колбаску.
Kafka – topics кафки до смешного визуально похожи на такие длинные лоханки, забитые, partitions – еще одна туго набитые колбаски, с байтами, которые извлекают, как бочки, из широкого люка посреди палубы. Ой, в смысле работают с ними параллельно, для ускорения процесса. Ну конечно в kafka есть много другого, для увеличения производительности:
Процессы генерирования/отправки и считывания сообщений организованы независимо друг от друга.
Пакетики для записи - «accumulate batch», это когда event пишутся
в трюм (файлы kafka) не по одному, а пачкой (и так же есть poll messages выдавать наружу events пачкой). И тут, сразу видно: главное преимущество kafka - использование последовательного I/O и для чтения, и для операций записи на диск. Ну какая-то магия с I/O-буфером
Дешевизна (суперсила флейта, увы тут флейт и Kafka не близнецы):
Флейт - флейт был первым типом корабля, который производился серийно, за счет стандартизации. Это позволило значительно ускорить производство, а также распределять производство по разным верфям, этакий sharding корабельных доков. В результате в Северной Европе развилась огромная судостроительная промышленность, которое активно производило типовые заготовки для строительства в Голландии флейтов, а также строила готовые флейты на продажу.
Kafka – kafka легко расширять, добавляя новые nodes на горячую.
Ну и множество фич, например: легко балансировать с тем, чтобы leaders реплик были равномерно раскиданы по brokers (кто не в курсе, kafka, при репликации, все запросы шлет к одной головной копии, а остальные, followers, просто для надежности).
Масштабирование (и еще общая суперсила):
Флейт – Опять повторимся: флейт был первым кораблем, который производился серийно, за счет стандартизации. Это также позволило снизить себестоимость. Себестоимость снижали и используемые материалы. В конструкции флейт частично, вместо дуба, использовалась сосна. Как писал современник: «Французы делают свои корабли из дуба, обитого железом, что стоит дорого: большинство голландских кораблей, сделаны только из сосны и оббиты деревом, и оттого дешевы». Да и у флейта короткие реи и куча лебедок, чтобы уменьшить экипаж. Опять дадим слово современнику: «Французы обязаны ставить четыре или пять матросов на суда водоизмещением от 20 до 30 тонн, чтобы заставить их плавать, голландцы — самое большее два или три человека; на корабль от 150 до 200 тонн французы ставили от 10 до 12 человек, голландцы только 7 или 8. Французы ставили 20-25 человек на корабль водоизмещением 300-400 тонн, голландцы только 12 или 16 человек, 18 максимум».
Kafka – KAFKA, по крайнем мере по мне, так же легче в развертывании и настройке, нежили IBM шина (ну пока не начнешь kafka превращать в ETL и нахлабучивать на нее NiFi и прочее), но сложнее, чем ActiveMQ. А еще, когда начинаешь маньячить на тему микросервисов, а заказчик часто заставляет, то приходится переносить Kafka в Kubernetes, и тут получаете кучу удовольствия - добавление новой node Kafka в кластер Kubernetes тянет за собой ручную балансировки, ну если вы не хотите потратить памяти в два раза, сверх необходимого.
Надежность (два типа надежных ? ):
Флейт – ну типа. Главная фишка в обеспечении надежности доставки флейтом груза это, это большая, относительно конкурентов, плавучесть, которая была достигнута, за счет грушевидной формой корпуса корабля. Зато дешевый сосновый корпус океанские волны размалывали в раз, это вам не дубовые, либо тиковые корпуса неубиваемых галеонов.
Kafka – тоже: ну типа надежная платформа.
Ага, ага: пока kafka не избавилась от Zookeeper, в ней есть узкое место, которое легко сломать и заодно всю платформу – без метаданных стримы превращаются в груду мусора (да, вышла новая версия без Zookeeper, увижу устойчиво работающей, поверю).
Да и обеспечить, с помощью kafka, надежность доставки сообщения, одновременно не допуская дублирование передачи events, крайне непросто. Вы уверены, что надежная доставка, про kafka?
Но, за вычетом громадной дыры и всяких проблем с надёжностью доставки одного конкретного event авторы все-таки приложили усилия к условной надежности. Только вместо формы корпуса у kafka то, что все events изначально пишется в файлы, причем с реплицикацией topics по куче brokers. Ну и всякая мелочевка, вроде выставления acks (режим подтверждения доставки) producer в значение 1 и т.д. и т.п..
Гибкость применения:
Флейт
И каравеллы и каракки и галеоны (общий обзор тогдашнего морского дела) были совершенно универсальными кораблями: в одном флаконе транспортник и боевой корабль, только пушки добавляй и снимай. В то время как флейт нельзя было переоборудовать в военный корабль из-за отсутствия пригодной для использования артиллерийской палубы, вспомним, что в флейтах от сплошной средней палубы отказались в пользу грузоподъемности. Ну тоесть можно и даже так и делали и получали супер/пупер судно: говн…-фрегат. Смотрите про флот герцогства Курляндского, эти пацаны именно так и поступали, и как только приплыли шведы, тут же спустили флаги, дабы не биться с полноценными военными кораблями.
Флейты господствовали в мелководных Северном и Балтийском морях, но даже голландские торговцы не так уж много использовали флейты для плаваний в Голландскую Ост-Индию. В тропиках выяснилось, что обшивка корабля не выдерживает высоких температур: в ней появлялись трещины. Ну и смотри выше, про надежность флейта.
KAFKA. У kafka с универсальностью куда лучше, из нее можно делать и интеграционную шину и ETL и БД. Причем по нормальному, а не так, как я делал ETL из ActiveMQ (но то было импортозамещение, а в этой теме каждый первый проект напоминает танцы нетрезвых гоблинов).
Эээ, к чему это я
Да, просто показалось забавно и поделился. Не ищите тайный смысл, просто гимнастика для ума, и потом взгляд с неожиданного ракурса всегда полезен...