<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Eugene Kozlov</title><author><name>Eugene Kozlov</name></author><id>https://teletype.in/atom/abstractart</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/abstractart?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@abstractart?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=abstractart"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/abstractart?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-07-03T23:48:29.200Z</updated><entry><id>abstractart:careerunderhood_map</id><link rel="alternate" type="text/html" href="https://teletype.in/@abstractart/careerunderhood_map?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=abstractart"></link><title>🗺 Карта канала &quot;Евгений Козлов пишет про IT&quot;</title><published>2025-11-17T07:40:04.644Z</published><updated>2026-03-02T13:15:30.543Z</updated><summary type="html">Здесь ссылки на посты, статьи и Github репозитории созданные и найденные мной за время существования канала.</summary><content type="html">
  &lt;p id=&quot;zV02&quot;&gt;Здесь ссылки на посты, статьи и Github репозитории созданные и найденные мной за время существования &lt;a href=&quot;https://t.me/careerunderhood&quot; target=&quot;_blank&quot;&gt;канала&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;WGrk&quot;&gt;&lt;strong&gt;🟢 Backend, Software Engineering&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;OvJZ&quot;&gt;
    &lt;li id=&quot;8Qw0&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/211&quot; target=&quot;_blank&quot;&gt;Проблема развития  Junior / Middle Backend разработчиков&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;encg&quot;&gt;&lt;strong&gt;Цикл&lt;/strong&gt; постов о ресурсах по прокачке в Backend &lt;a href=&quot;https://t.me/careerunderhood/211&quot; target=&quot;_blank&quot;&gt;#0&lt;/a&gt; &lt;a href=&quot;https://t.me/careerunderhood/212&quot; target=&quot;_blank&quot;&gt;#1&lt;/a&gt; &lt;a href=&quot;https://t.me/careerunderhood/218&quot; target=&quot;_blank&quot;&gt;#2&lt;/a&gt; &lt;a href=&quot;https://t.me/careerunderhood/220&quot; target=&quot;_blank&quot;&gt;#3&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;6sPv&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/beagreatengineer/how-to-develop-perfect-crud&quot; target=&quot;_blank&quot;&gt;Хорошие практики разработки типичных back-end приложений&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;aydX&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://t.me/careerunderhood/145&quot; target=&quot;_blank&quot;&gt;Как практиковаться начинающему разработчику?&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;MGAu&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/175&quot; target=&quot;_blank&quot;&gt;Подборка ресурсов по Git&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;isNA&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/151&quot; target=&quot;_blank&quot;&gt;Полезные технические ресурсы программисту-стартаперу&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;UavV&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/173&quot; target=&quot;_blank&quot;&gt;Научные статьи по Computer Science&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;SYEA&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/386&quot; target=&quot;_blank&quot;&gt;Саморазвитие в Computer Science через практику языка Си&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;t1N6&quot;&gt;&lt;strong&gt;🟢 Docker, K8s, Microservices&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;FCO2&quot;&gt;
    &lt;li id=&quot;Nw5G&quot;&gt;Цикл постов о виртуализации и контейнерах &lt;a href=&quot;https://t.me/careerunderhood/181&quot; target=&quot;_blank&quot;&gt;#1 &lt;/a&gt;&lt;a href=&quot;https://t.me/careerunderhood/182&quot; target=&quot;_blank&quot;&gt;#2 &lt;/a&gt;&lt;a href=&quot;https://t.me/careerunderhood/183&quot; target=&quot;_blank&quot;&gt;#3 &lt;/a&gt;&lt;a href=&quot;https://t.me/careerunderhood/185&quot; target=&quot;_blank&quot;&gt;#4&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;DDH7&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://t.me/careerunderhood/196&quot; target=&quot;_blank&quot;&gt;TOP 3 ресурса по погружению в Docker, Kubernetes, Microservices, Cloud Native.&lt;/a&gt;&lt;/strong&gt; &lt;/li&gt;
    &lt;li id=&quot;q4Eh&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/195&quot; target=&quot;_blank&quot;&gt;Подборка для изучения и практики Kubernetes&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;McOt&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/282&quot; target=&quot;_blank&quot;&gt;What happens when ... Kubernetes edition!&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;WxB2&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/240&quot; target=&quot;_blank&quot;&gt;Создать K8s кластер в одну команду&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;UeA1&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/190&quot; target=&quot;_blank&quot;&gt;Монолитная архитектура&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;f9KV&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/194&quot; target=&quot;_blank&quot;&gt;Прагматичный взгляд на Микросервисную архитектуру.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;H2cu&quot;&gt;&lt;strong&gt;🟢 Linux, DevOps, SRE&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;rn5v&quot;&gt;
    &lt;li id=&quot;X3tJ&quot;&gt;Подборка бесплатных ресурсов по изучению командной строки и утилит Linux &lt;a href=&quot;https://t.me/careerunderhood/128&quot; target=&quot;_blank&quot;&gt;#1&lt;/a&gt; &lt;a href=&quot;https://t.me/careerunderhood/131&quot; target=&quot;_blank&quot;&gt;#2&lt;/a&gt; &lt;a href=&quot;https://t.me/careerunderhood/132&quot; target=&quot;_blank&quot;&gt;#3&lt;/a&gt; &lt;/li&gt;
    &lt;li id=&quot;Qqq3&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/39&quot; target=&quot;_blank&quot;&gt;Изучение DevOps через упражнения&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;9pzX&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/142&quot; target=&quot;_blank&quot;&gt;Бесплатный видеокурс по основам SRE от инженеров Google Cloud&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;DdM7&quot;&gt;&lt;a href=&quot;https://github.com/mxssl/sre-interview-prep-guide&quot; target=&quot;_blank&quot;&gt;SRE Interview Preparation Guide&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;pxPx&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/217&quot; target=&quot;_blank&quot;&gt;Обзор сетевых очередей Linux&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;1Fhc&quot;&gt;&lt;strong&gt;🟢 &lt;/strong&gt;Concurrency, Performance&lt;/h2&gt;
  &lt;ul id=&quot;wGEi&quot;&gt;
    &lt;li id=&quot;8dLt&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/335&quot; target=&quot;_blank&quot;&gt;Concurrency. Multiprocess, Multithreading и Async&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;jYQg&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/403&quot; target=&quot;_blank&quot;&gt;Concurrency. Synchronization и Consistency&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;s0Nl&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/55&quot; target=&quot;_blank&quot;&gt;Продуманная оптимизация&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;V5l6&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/419&quot; target=&quot;_blank&quot;&gt;SIMD&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;VaT6&quot;&gt;🟢 Языки программирования&lt;/h2&gt;
  &lt;h3 id=&quot;g78W&quot;&gt;🔵 Golang&lt;/h3&gt;
  &lt;ul id=&quot;mcDy&quot;&gt;
    &lt;li id=&quot;x52j&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/210&quot; target=&quot;_blank&quot;&gt;Как я изучал язык Go&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;oxJN&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/207&quot; target=&quot;_blank&quot;&gt;Тулинг для Go разработчика&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;FbSd&quot;&gt;🔵 Ruby&lt;/h3&gt;
  &lt;ul id=&quot;IFrC&quot;&gt;
    &lt;li id=&quot;jZtF&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/258&quot; target=&quot;_blank&quot;&gt;💎 Learn Ruby. My way&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;g2MF&quot;&gt;&lt;a href=&quot;https://teletype.in/@abstractart/learn-rails-senior&quot; target=&quot;_blank&quot;&gt;💎 Learn Rails. My way&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;wM3G&quot;&gt;&lt;a href=&quot;https://dev.to/abstractart/easy-way-to-setup-debugger-and-autocomplete-for-ruby-in-visual-studio-code-2gcc&quot; target=&quot;_blank&quot;&gt;💎Complete Guide to setup VS Code for Ruby on Rails (Debugger, Linter, Completion, Formatting)&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;fhgY&quot;&gt;🔵 Python&lt;/h3&gt;
  &lt;ul id=&quot;EqRt&quot;&gt;
    &lt;li id=&quot;72nI&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/261&quot; target=&quot;_blank&quot;&gt;🐍 Как я изучал Python. Step 1 - Изучение языка.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;zxZd&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/262&quot; target=&quot;_blank&quot;&gt;🐍 Как я изучал Python. Step 2 - Инструменты и библиотеки.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;H0ZK&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/267&quot; target=&quot;_blank&quot;&gt;🐍 Как я изучал Python. Step 3 - Concurrency&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;85vH&quot;&gt;&lt;a href=&quot;https://habr.com/ru/articles/773376/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;🐍Практический гайд по процессам и потокам (и не только) в Python&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;WGLX&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/261&quot; target=&quot;_blank&quot;&gt;🐍&lt;/a&gt; &lt;a href=&quot;https://habr.com/ru/articles/764420/&quot; target=&quot;_blank&quot;&gt;Многопоточность в Python: очевидное и невероятное&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;41Ik&quot;&gt;&lt;strong&gt;🟢 OLTP СУБД&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;canb&quot;&gt;
    &lt;li id=&quot;5JZ2&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://t.me/careerunderhood/160&quot; target=&quot;_blank&quot;&gt;Подборка книг по СУБД. От новичка до эксперта.&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;PP6l&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/295&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Путеводитель по базам данных&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;i2Mz&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/161&quot; target=&quot;_blank&quot;&gt;Use The Index, Luke&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;soU6&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/114&quot; target=&quot;_blank&quot;&gt;Подборка классных и бесплатных ресурсов по PostgreSQL&lt;/a&gt; &lt;/li&gt;
    &lt;li id=&quot;BxuW&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/167&quot; target=&quot;_blank&quot;&gt;Партиционирование в PostgreSQL&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nFex&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/284&quot; target=&quot;_blank&quot;&gt;Пагинация на примере PostgreSQL. От простого к сложному&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;ZL11&quot;&gt;&lt;strong&gt;🟢 OLAP. Data Engineering&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;83zC&quot;&gt;
    &lt;li id=&quot;hsgO&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/379&quot; target=&quot;_blank&quot;&gt;Fundamentals of Data Engineering&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ANd2&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/322&quot; target=&quot;_blank&quot;&gt;7 баз данных за 7 недель, Clickhouse&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;7FNQ&quot;&gt;&lt;strong&gt;🟢 &lt;/strong&gt;Kafka&lt;/h2&gt;
  &lt;ul id=&quot;BGz4&quot;&gt;
    &lt;li id=&quot;W0ar&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://teletype.in/@abstractart/kafka-for-novices&quot; target=&quot;_blank&quot;&gt;Простым языком об Apache Kafka, как, зачем и почему&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;Y9Vy&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/241&quot; target=&quot;_blank&quot;&gt;Kafka Connect Tutorial&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;KhbP&quot;&gt;&lt;strong&gt;🟢 Big Tech Interview&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;xgxp&quot;&gt;
    &lt;li id=&quot;J6jF&quot;&gt;&lt;a href=&quot;https://github.com/beagreatengineer/learn-system-design&quot; target=&quot;_blank&quot;&gt;Всё, что нужно знать о System Design для прохождения интервью и не только&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;nJQk&quot;&gt;&lt;a href=&quot;https://github.com/beagreatengineer/algo-interview&quot; target=&quot;_blank&quot;&gt;Бесплатный, минимально необходимый план подготовки к алгоритмическому интервью в компанию мечты.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;56CO&quot;&gt;&lt;strong&gt;🟢 Soft Skills, Mindset&lt;/strong&gt;&lt;/h2&gt;
  &lt;ul id=&quot;qExq&quot;&gt;
    &lt;li id=&quot;hnYG&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/194&quot; target=&quot;_blank&quot;&gt;1 to 1 - что это, зачем, как подготовиться?&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;suZA&quot;&gt;Какие вопросы стоит задать перед тем как принять оффер? &lt;a href=&quot;https://t.me/careerunderhood/115&quot; target=&quot;_blank&quot;&gt;#1&lt;/a&gt;&lt;a href=&quot;https://t.me/careerunderhood/51&quot; target=&quot;_blank&quot;&gt; #2&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;6cOi&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/90&quot; target=&quot;_blank&quot;&gt;Зарплатные переговоры&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;rH7f&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://t.me/careerunderhood/47&quot; target=&quot;_blank&quot;&gt;Как правильно задавать вопросы, если ты начинающий айтишник&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;vkMT&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://t.me/careerunderhood/127&quot; target=&quot;_blank&quot;&gt;Наглядный жизненный урок&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;li id=&quot;FZG8&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/237&quot; target=&quot;_blank&quot;&gt;Почему обучение — это новая прокрастинация&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;hPS9&quot;&gt;🟢 Личное&lt;/h2&gt;
  &lt;ul id=&quot;Aj8J&quot;&gt;
    &lt;li id=&quot;vpaU&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/257&quot; target=&quot;_blank&quot;&gt;Первые шаги в профессии. Ruby&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;7jSo&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/266&quot; target=&quot;_blank&quot;&gt;Рост в Ruby до уровня Senior&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;caps&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/271&quot; target=&quot;_blank&quot;&gt;Как я в первый раз попробовал покорить Big Tech&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;Njus&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/301&quot; target=&quot;_blank&quot;&gt;Вторая попытка свичнуться из Ruby или как уволиться отработав 2х недели и научиться слышать себя.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;jc0M&quot;&gt;&lt;a href=&quot;https://t.me/careerunderhood/303&quot; target=&quot;_blank&quot;&gt;Как я менял стек. Success story после череды неудач.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>abstractart:org-structure</id><link rel="alternate" type="text/html" href="https://teletype.in/@abstractart/org-structure?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=abstractart"></link><title>Про оргструктуры компаний</title><published>2025-04-08T11:51:35.666Z</published><updated>2025-04-08T12:12:32.754Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d7/53/d7534ed2-2e11-47ee-9f30-a0dd5cf512db.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image07.jpg&quot;&gt;В рамках прохождения курса &quot;Школа Технического директора&quot; от Стратоплана собрал конспект с кратким обзором основных видов организационных структур компаний.</summary><content type="html">
  &lt;p id=&quot;5FKQ&quot;&gt;В рамках прохождения курса &amp;quot;Школа Технического директора&amp;quot; от Стратоплана собрал конспект с кратким обзором основных видов организационных структур компаний.&lt;/p&gt;
  &lt;p id=&quot;dAul&quot;&gt;&lt;strong&gt;Плоская оргструктура&lt;/strong&gt; - хороша тем что все решения принимаются быстро а минус в том что руководитель в такой системе станет бас фактором. Так как руководить в одиночку всеми специалистами напрямую задачка для человека с  высоким уровнем компетенций.&lt;/p&gt;
  &lt;p id=&quot;S8Nz&quot;&gt;&lt;strong&gt;Линейная / иерархическая оргструктура&lt;/strong&gt; -  добавляет иерархии, появляется несколько уровней управления, руководители взаимозаменяемы  и все довольно прозрачно с точки зрения полномочий и ответственности. К минусам стоит отнести что скорость принятия решений низкая.&lt;/p&gt;
  &lt;p id=&quot;TtBk&quot;&gt;&lt;strong&gt;Функциональная оргструктура&lt;/strong&gt; - если дробить департаменты по исполняемой функции (например разработка, тестирование и эсплуатация) то получается что внутри юнита принимаются качественные решения, все сфокусированы на своей функции которую выполняют отлично, но такой подход сложно масштабировать + достижение бизнес целей с такой оргструктурой может быть затруднено, так как каждый юнит неявно работает на себя и глубокий фокус становится минусом.&lt;/p&gt;
  &lt;figure id=&quot;OSqW&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image07.jpg&quot; width=&quot;600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jwUy&quot;&gt;&lt;strong&gt;Проектная оргструктура&lt;/strong&gt;. Хороша тем, что каждый департамент сфокусирован на своем проекте и приносит конкретную измеримую пользу бизнесу. К минусам можно отнести проблему что в такой оргструктуре с ростом компании будет проблемой &amp;quot;выравнивание&amp;quot; культуры между проектами, выравнивание экспертизы специалистов. Сфера применимости - outsource компании.&lt;/p&gt;
  &lt;p id=&quot;VEEO&quot;&gt;&lt;strong&gt;Матричная оргструктура&lt;/strong&gt; - одна из самых популярных оргструктур, к ее плюсам можно отнести высокую гибкость, а также то что менеджмент уделяет внимание всем возможным аспектам (delivery / people management). Основные минусы такой оргструктуры - двоевластие и размытие ответственности.&lt;/p&gt;
  &lt;figure id=&quot;51vL&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image21.jpg&quot; width=&quot;600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bqes&quot;&gt;&lt;strong&gt;Дивизионная оргструктура&lt;/strong&gt;. Плюсы: масштабируемся быстро, просто создаем новый дивизион. Четкие уровни управления. К минусам можно отнести высокий уровень дезинтеграции и дублирование функций в каждом дивизионе.&lt;/p&gt;
  &lt;p id=&quot;Ry8d&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;6CKV&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image13.jpg&quot; width=&quot;600&quot; /&gt;
    &lt;figcaption&gt;Дивизионная оргструктура с делением на продукты&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;jFs4&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;UeRc&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image18.jpg&quot; width=&quot;600&quot; /&gt;
    &lt;figcaption&gt;Дивизионная оргструктура с делением на рынки&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;LdFS&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;BNnZ&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://media.lpgenerator.ru/uploads/2015/09/19/image17.jpg&quot; width=&quot;600&quot; /&gt;
    &lt;figcaption&gt;Дивизионная оргструктура с делением по локации&lt;/figcaption&gt;
  &lt;/figure&gt;

</content></entry><entry><id>abstractart:learn-rails-senior</id><link rel="alternate" type="text/html" href="https://teletype.in/@abstractart/learn-rails-senior?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=abstractart"></link><title>💎 Learn Rails from Junior to Senior. My way</title><published>2024-01-23T13:57:51.650Z</published><updated>2024-01-23T15:08:03.527Z</updated><summary type="html">&lt;img src=&quot;https://img1.teletype.in/files/c9/a1/c9a1b36a-b8df-4a74-be1b-e3df29c6e7ee.png&quot;&gt;Продолжаю рассказывать по каким материалам учился и прокачивался в первом профессиональном стеке - Ruby &amp; Rails. Далее вы найдете огромную кучу ресурсов, которые помогли мне овладеть основными компонентами фреймворка, углубиться в них и решать задачи эффективно с точки зрения времени + писать производительный код.</summary><content type="html">
  &lt;p id=&quot;Rp9F&quot;&gt;Продолжаю рассказывать по каким материалам учился и прокачивался в первом профессиональном стеке - Ruby &amp;amp; Rails. Далее вы найдете огромную кучу ресурсов, которые помогли мне &lt;/p&gt;
  &lt;ul id=&quot;xJEG&quot;&gt;
    &lt;li id=&quot;0Zf9&quot;&gt;овладеть основными компонентами фреймворка.&lt;/li&gt;
    &lt;li id=&quot;YSEd&quot;&gt;углубиться в них и решать задачи эффективно с точки зрения времени.&lt;/li&gt;
    &lt;li id=&quot;tvcz&quot;&gt;писать производительный код.&lt;/li&gt;
    &lt;li id=&quot;ri07&quot;&gt;вырости до уровня Senior и решать сложные задачи. &lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;eDWr&quot;&gt;Аналогичный пост по Ruby - &lt;a href=&quot;https://t.me/careerunderhood/258&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;VOgS&quot;&gt;💎Getting Started&lt;/h2&gt;
  &lt;p id=&quot;qBuY&quot;&gt;У Rails просто офигенная документация, я очень часто использовал ее для решения повседневных задач. Для меня это один из примеров того как должна выглядеть дружелюбная к разработчику дока.&lt;/p&gt;
  &lt;ul id=&quot;gSaA&quot;&gt;
    &lt;li id=&quot;UxVP&quot;&gt;&lt;a href=&quot;http://guides.rubyonrails.org/&quot; target=&quot;_blank&quot;&gt;https://rusrails.ru/&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;3HKY&quot;&gt;&lt;a href=&quot;http://guides.rubyonrails.org/&quot; target=&quot;_blank&quot;&gt;http://guides.rubyonrails.org/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;yEVK&quot;&gt;Ну и само собой я не могу не отметить классику - &lt;a href=&quot;https://www.railstutorial.org&quot; target=&quot;_blank&quot;&gt;туториал Майкла Хартла&lt;/a&gt; по написанию клона твиттера&lt;/p&gt;
  &lt;h3 id=&quot;Ffkr&quot;&gt;&lt;strong&gt;Книги&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;pyyT&quot;&gt;
    &lt;li id=&quot;7p02&quot;&gt;&lt;strong&gt;&lt;u&gt;Agile Web Development with Rails 7&lt;/u&gt;&lt;/strong&gt; - тот самый туториал про интернет магазин&lt;/li&gt;
    &lt;li id=&quot;2OfR&quot;&gt;&lt;u&gt;&lt;strong&gt;The Rails 7 Way &lt;/strong&gt;&lt;/u&gt;- энциклопедия по Ruby on Rails&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;l3rW&quot;&gt;💎 Best practices&lt;/h2&gt;
  &lt;p id=&quot;a1GZ&quot;&gt;Репозитории компании разрабатывающих на Ruby в которых они ведут свои соглашения и правила по написанию кода на Ruby on Rails. &lt;/p&gt;
  &lt;p id=&quot;UWYi&quot;&gt;Если вы хотите максимально быстро прокачаться лучше ресурса не найти - учитесь на чужих ошибках и впитывайте чужой опыт.&lt;/p&gt;
  &lt;ul id=&quot;ykr6&quot;&gt;
    &lt;li id=&quot;6vvY&quot;&gt;&lt;a href=&quot;https://github.com/ankane/production_rails&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Best practices for running Rails in production&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JPE3&quot;&gt;&lt;a href=&quot;https://github.com/infinum/rails-handbook&quot; target=&quot;_blank&quot;&gt;Describing the development process used by the Infinum Rails Team.&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;8aYH&quot;&gt;&lt;a href=&quot;https://github.com/thoughtbot/guides&quot; target=&quot;_blank&quot;&gt;A guide for programming in style.&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;6WWB&quot;&gt;💎 Templates&lt;/h2&gt;
  &lt;p id=&quot;IrN6&quot;&gt;Для того чтобы с нуля стартовать с крутым набором инструментом и не тратить время на настройку локального окружения можно воспользоваться готовыми сборками:&lt;/p&gt;
  &lt;ul id=&quot;lLg8&quot;&gt;
    &lt;li id=&quot;9bZf&quot;&gt;&lt;a href=&quot;https://github.com/ledermann/docker-rails&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;https://github.com/ledermann/docker-rails&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;DAx2&quot;&gt;&lt;a href=&quot;https://github.com/bullet-train-co/bullet_train&quot; target=&quot;_blank&quot;&gt;https://github.com/bullet-train-co/bullet_train&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cVvH&quot;&gt;Статья о том из каких библиотек строят проекты Evil Martians - &lt;a href=&quot;https://evilmartians.com/chronicles/gemfile-of-dreams-libraries-we-use-to-build-rails-apps&quot; target=&quot;_blank&quot;&gt;Gemfile of dreams: the libraries we use to build Rails apps&lt;/a&gt;&lt;/p&gt;
  &lt;h1 id=&quot;8TI0&quot;&gt;💎 Performance&lt;/h1&gt;
  &lt;p id=&quot;AMiF&quot;&gt;Статьи в которых авторы ныряют вглубь фреймворка и разбираются какие же места в нем медленные и как их можно оптимизировать и ускорить.&lt;/p&gt;
  &lt;ul id=&quot;AaTM&quot;&gt;
    &lt;li id=&quot;Sr21&quot;&gt;&lt;a href=&quot;https://jtway.co/design-rails-json-api-with-performance-in-mind-427e0f0e6f04?gi=425ac75ebcf9&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Design Rails JSON API with performance in mind - JTWay&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;El9p&quot;&gt;&lt;a href=&quot;https://buttercms.com/blog/json-serialization-in-rails-a-complete-guide&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;JSON Serialization in Rails: A Complete Guide&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;njSV&quot;&gt;&lt;a href=&quot;https://github.com/puma/puma/blob/master/docs/architecture.md&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Архитектура сервера PUMA&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;92ez&quot;&gt;&lt;a href=&quot;https://www.speedshop.co/2017/10/12/appserver.html&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Configuring Puma, Unicorn and Passenger for Maximum Efficiency&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ITrJ&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=F07xFtorXDA&quot; target=&quot;_blank&quot;&gt;Threads are evil. Async Ruby in action - Подробный гайд о тредах, процессах и асинхронности&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;u0y0&quot;&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=eYhJWoxgoKA&quot; target=&quot;_blank&quot;&gt;Ruby CPU and Memory - Pareto principle - как профилировать производительность приложений&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;iihw&quot;&gt;&lt;strong&gt;💎 Active Record&lt;/strong&gt;&lt;/h2&gt;
  &lt;p id=&quot;QTno&quot;&gt;Всё что нужно знать чтобы хорошо уметь готовить ActiveRecord  и выжимать из него максимум&lt;/p&gt;
  &lt;ul id=&quot;LUt2&quot;&gt;
    &lt;li id=&quot;Hi4A&quot;&gt;самый популярный вопрос на собеседовании  - &lt;a href=&quot;https://scoutapm.com/blog/activerecord-includes-vs-joins-vs-preload-vs-eager_load-when-and-where&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Making sense of ActiveRecord joins, includes, preload, and eager_load &lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;a2XR&quot;&gt;&lt;a href=&quot;https://blog.carbonfive.com/2016/11/16/rails-database-best-practices/&quot; target=&quot;_blank&quot;&gt;Rails Database Best Practices &lt;strong&gt;(About queries)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;jRlh&quot;&gt;&lt;a href=&quot;https://blog.cloud66.com/getting-the-most-out-of-your-database-with-ruby-on-rails/&quot; target=&quot;_blank&quot;&gt;Getting the Most out of your Database with Ruby on Rails &lt;strong&gt;(About configuration)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ZIjE&quot;&gt;&lt;a href=&quot;http://thelazylog.com/understanding-locking-in-rails-activerecord/&quot; target=&quot;_blank&quot;&gt;Understanding&lt;strong&gt; Locking&lt;/strong&gt; in Rails ActiveRecord&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;v25O&quot;&gt;PostgreSQL&lt;/p&gt;
  &lt;ul id=&quot;fsuK&quot;&gt;
    &lt;li id=&quot;iCq7&quot;&gt;&lt;a href=&quot;https://karolgalanciak.com/blog/2018/08/19/indexes-on-rails-how-to-make-the-most-of-your-postgres-database/&quot; target=&quot;_blank&quot;&gt;Indexes on Rails: How to Make the Most of Your Postgres Database&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;elcX&quot;&gt;&lt;a href=&quot;https://pgday.ru/files/papers/27/rails.postgresql_pgday_2015.pdf&quot; target=&quot;_blank&quot;&gt;Как правильно готовить Ruby on Rails для работы с PostgreSQL&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;gDk3&quot;&gt;💎 Архитектура / Паттерны&lt;/h2&gt;
  &lt;p id=&quot;gKpF&quot;&gt;Rails довольно гибкий и мощный фреймворк в котором многое держится на соглашениях, и если бездумно ими пользоваться то проект может превратиться в запутанное спагетти&lt;/p&gt;
  &lt;ul id=&quot;tjFq&quot;&gt;
    &lt;li id=&quot;cWma&quot;&gt;&lt;a href=&quot;https://speakerdeck.com/inem/rails-hurts-because-were-using-it-wrong-lets-fix-that?slide=26&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Rails hurts, because we&amp;#x27;re using it wrong. Let&amp;#x27;s fix that!&lt;/strong&gt; - в чём проблема с архитектурой Rails?&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;REwa&quot;&gt;&lt;a href=&quot;https://rubyhero.dev/rails-design-patterns-the-big-picture&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Rails design patterns&lt;/strong&gt; - простые варианты как улучшить кодовую базу&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;N3i5&quot;&gt;💎 Rails Security&lt;/h2&gt;
  &lt;p id=&quot;3lVu&quot;&gt;Работая в production важно не только делать фичу но и писать безопасный код и защищать данные клиентов от вредоносного вмешательства.&lt;/p&gt;
  &lt;ul id=&quot;aQ2Z&quot;&gt;
    &lt;li id=&quot;QW8W&quot;&gt;&lt;a href=&quot;https://github.com/brunofacca/zen-rails-security-checklist&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Checklist of security precautions for Ruby on Rails applications.&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;ktja&quot;&gt;&lt;a href=&quot;https://rails-sqli.org/&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;SQL Injections Guide&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;aYAc&quot;&gt;💎 Блоги компаний&lt;/h2&gt;
  &lt;ul id=&quot;7wUn&quot;&gt;
    &lt;li id=&quot;zI7j&quot;&gt;&lt;a href=&quot;https://thoughtbot.com/blog&quot; target=&quot;_blank&quot;&gt;https://thoughtbot.com/blog&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;c52w&quot;&gt;&lt;a href=&quot;https://evilmartians.com/chronicles&quot; target=&quot;_blank&quot;&gt;https://evilmartians.com/chronicles&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>abstractart:kafka-for-novices</id><link rel="alternate" type="text/html" href="https://teletype.in/@abstractart/kafka-for-novices?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=abstractart"></link><title>Простым языком об Apache Kafka, как, зачем и почему</title><published>2023-08-13T10:50:59.784Z</published><updated>2024-01-23T15:01:05.585Z</updated><summary type="html">В данной статье я хочу попытаться рассказать максимально доступно и просто о такой непростой технологии как Apache Kafka. Расскажу о том:</summary><content type="html">
  &lt;p id=&quot;docs-internal-guid-148588fb-7fff-7854-cdf2-3d3dc9c9ddfa&quot;&gt;В данной статье я хочу попытаться рассказать максимально доступно и просто о такой непростой технологии как Apache Kafka. Расскажу о том:&lt;/p&gt;
  &lt;ul id=&quot;NXrt&quot;&gt;
    &lt;li id=&quot;wtuc&quot;&gt;Кем и зачем она была создана.&lt;/li&gt;
    &lt;li id=&quot;hKpe&quot;&gt;Доступно рассмотрим из каких абстракций и примитивов состоит.&lt;/li&gt;
    &lt;li id=&quot;nPDG&quot;&gt;За счет чего достигается высокая пропускная способность.&lt;/li&gt;
    &lt;li id=&quot;aCD5&quot;&gt;Поговорим про отказоустойчивость и за счет чего она достигается.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;RCAV&quot;&gt;Многие новички часто задают вопрос &amp;quot;Почему?&amp;quot; касаемо любой новой технологии. Надеюсь что этой статьей я смогу ответить на большинство “Почему?” связанных с Apache Kafka.&lt;/p&gt;
  &lt;h2 id=&quot;hpeS&quot;&gt;Краткий экскурс в историю. Причины появления Kafka&lt;/h2&gt;
  &lt;p id=&quot;NoLN&quot;&gt;Apache Kafka — распределенный, реплицируемый журнал с открытым исходным кодом, разрабатываемый в рамках фонда Apache. Написан на Java и Scala. Сложно, непонятно, но пойдем дальше.&lt;/p&gt;
  &lt;p id=&quot;syKB&quot;&gt;Разработан в компании LinkedIn в начале 2010х, далее был передан в фонд Apache. Сейчас авторы проекта работают в компании Confluent которую сами и основали.&lt;/p&gt;
  &lt;p id=&quot;sYsa&quot;&gt;Kafka зародилась в LinkedIn как решение для задач про передаче больших объемов данных между сервисами, в частности для построения моделей машинного обучения. Классические брокеры сообщений не могли обеспечить нужную пропускную способность (throughput) и LinkedIn решил создать “свой велосипед”&lt;/p&gt;
  &lt;h2 id=&quot;rcTU&quot;&gt;Из чего состоит Apache Kafka?&lt;/h2&gt;
  &lt;p id=&quot;kH9q&quot;&gt;Что же придумали разработчики Kafka чтобы достигнуть высокой скорости передачи данных? Ответ: сделали брокер максимально простым и топорным: он хранит все сообщения на диске и позволяет делать с ними только 2 простых но очень эффективных с точки зрения железа операции:&lt;/p&gt;
  &lt;ul id=&quot;rbIr&quot;&gt;
    &lt;li id=&quot;4qZ3&quot;&gt;добавить запись в конец файла&lt;/li&gt;
    &lt;li id=&quot;bnr2&quot;&gt;прочитать файл с позиции X до позиции Y&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;nJVb&quot;&gt;Как следствие, нельзя:&lt;/p&gt;
  &lt;ul id=&quot;raYI&quot;&gt;
    &lt;li id=&quot;kySy&quot;&gt;искать, фильтровать данные на стороне кластера, только на стороне клиента&lt;/li&gt;
    &lt;li id=&quot;fysv&quot;&gt;удалять данные  (за удаление данных отвечает Kafka)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;fg7V&quot;&gt;За чтение сообщений отвечают потребители (consumers).За отправку сообщений в Kafka отвечают производители (producers). Писатель и читатель при взаимодействии с брокером указывают обязательный параметр - topic или тема. За счет него логически идет разделение потоков данных на стороне kafka.&lt;/p&gt;
  &lt;h3 id=&quot;jspk&quot;&gt;Чуть подробнее о потребителях&lt;/h3&gt;
  &lt;p id=&quot;Vq2z&quot;&gt;Потребитель по порядку читает сообщения из темы и направляет брокеру Kafka специальные сообщения о том что он прочитал. В этом самом сообщении брокеру передается специальный идентификатор offset - позиция на которой остановился читатель.&lt;/p&gt;
  &lt;p id=&quot;tQjB&quot;&gt;Если читатель перезапускается то при повторном подключении к брокеру он получит последнее актуальное состояние offset и продолжит читать сообщения с того места на котором остановился. Offset в каком то смысле похож на индекс в массиве. Зная индекс мы можем сразу обратиться к нужному элементу и продолжить обработку всех последующих за ним.&lt;/p&gt;
  &lt;h2 id=&quot;MUSY&quot;&gt;И это всё? Просто файлы?&lt;/h2&gt;
  &lt;p id=&quot;wGBV&quot;&gt;На самом деле нет. Представим, у нас есть топик X, в который пишется очень много сообщений. Мы понимаем что в одного потребителя не справляемся и хотим распаралелить процесс. Если наш topic это просто файл то читать из него несколькими потребителями становится проблематично, так как нужно потребителей синхронизировать между собой, чтобы не получилось так что каждый потребитель обрабатывает одно и то же. Синхронизация это время, и оно очень ценно, с ростом количества потребителей время синхронизации будет линейно расти.&lt;/p&gt;
  &lt;p id=&quot;DXpF&quot;&gt;Что же делать? Разработчики Kafka решили разделить топик на N независимых сущностей (по факту это те же файлы) назвав партициями. Теперь нас ничто не останавливает от того чтобы создать N потребителей и быстро вычитывать данные, так как потребителей не нужно синхронизировать, каждый читает только свой кусочек, свою партицию.&lt;/p&gt;
  &lt;p id=&quot;uzQz&quot;&gt;Мы достигли цели, пропускная способность за счет деления топика на партиции способна расти линейно, успевай добавлять партицию и потребителей.&lt;/p&gt;
  &lt;p id=&quot;iJ9n&quot;&gt;Набор потребителей в Kafka именуется Consumer Group (группа потребителей). При добавлении или выходе потребителей из группы kafka требуется ребалансировка, чтобы либо выделить новому потребителю свою партицию либо назначить уже работающему консьюмеру партицию которую читал умерший консьюмер.&lt;/p&gt;
  &lt;h2 id=&quot;J3tR&quot;&gt;Что насчет отказоустойчивости?&lt;/h2&gt;
  &lt;h3 id=&quot;600N&quot;&gt;Репликация&lt;/h3&gt;
  &lt;p id=&quot;rdct&quot;&gt;Что может пойти не так с Kafka брокером? Да всё что угодно, например сервер на котором он развернут может выйти из строя. В таком случае мы не сможем ни писать сообщения ни читать их, а это грусть печаль, бизнес стопорится, деньги не зарабатываются. Что спасает в таких случаях? Правильно, избыточность.&lt;/p&gt;
  &lt;p id=&quot;IFmB&quot;&gt;Если базы данных умеют восстанавливаться от сбоев за счет репликации то почему бы и Kafka не перенять эту механику? Так посчитали и разработчики Kafka и добавили механизм репликации данных между узлами. Теперь вместо одного брокера получаем кластер брокеров.&lt;/p&gt;
  &lt;p id=&quot;D612&quot;&gt;Если с одним из узлов что-то пойдет не так, то не только система продолжит свою работу но и потребители и производители за счет переключения чтений и записей на партиции из других реплик кластера.&lt;/p&gt;
  &lt;p id=&quot;l9jk&quot;&gt;Репликация конфигурируется для каждого топика через переменную Replication Factor - сколько копий для партиции нужно иметь в кластере.&lt;/p&gt;
  &lt;h3 id=&quot;Bfc9&quot;&gt;Controller&lt;/h3&gt;
  &lt;p id=&quot;cPKC&quot;&gt;У одного узла в кластере Kafka есть специальная роль - controller, в его обязанности входит как раз таки на основании состояния кластера назначать лидеры для партиций топиков. Лидер партиция - партиция с которой взаимодействуют потребители и произовдители.  Аналог мастера в мире БД. Остальные копии лидер-партиции являются ведомыми и их обязанность - участвовать в репликации.&lt;/p&gt;
  &lt;p id=&quot;7D7l&quot;&gt;Для того чтобы гарантировать в кластере уникальность роли controller а также хранить и отслеживать состояние брокеров кластера Kafka использует kraft / Apache Zookeper.&lt;/p&gt;
  &lt;h2 id=&quot;yamB&quot;&gt;Итог&lt;/h2&gt;
  &lt;p id=&quot;lhCp&quot;&gt;В данной статье я постарался описать максимально простым и понятным языком как устроен брокер Apache Kafka и почему именно так а не как иначе. Многие вещи в этой статье не удалось рассмотреть, например семантики доставки, это было сделано осознанно чтобы не растягивать статью.&lt;/p&gt;
  &lt;p id=&quot;kd4x&quot;&gt;Надеюсь у меня получилось доступно донести концепции и теперь вас не испугать популяным определением которую дают Kafka на просторах сети - распределенный, реплицируемый журнал&lt;/p&gt;

</content></entry></feed>