Перейти до основного вмісту

Публікації

Стратегії ребалансування в Kafka

Стратегії ребалансування в Kafka Ребалансування (Rebalancing) — це процес перерозподілу партицій між споживачами (сonsumer) у групі (Consumer Group). Kafka має кілька стратегій ребалансування: RangeAssignor. Ця стратегія розподіляє партиції на основі діапазонів, які створюються відповідно до сортування топіків і партицій. Наприклад, якщо є два консюмери і 6 партицій (P0–P5), перший консюмер отримає P0–P2, а другий — P3–P5. Особливості: Простий алгоритм. Може призводити до нерівномірного розподілу, якщо кількість партицій не ділиться порівну між консюмерами. RoundRobinAssignor. Ця стратегія рівномірно розподіляє партиції між консюмерами за круговим принципом. Наприклад, якщо є два консюмери і 6 партицій, перший отримає P0, P2, P4, а другий — P1, P3, P5. Особливості: Гарантує більш рівномірний розподіл партицій. Використовується в багатотопікових сценаріях. StickyAssignor. Ця стратегія намагається мінімізувати кількість змін у розподілі партицій між консюмерами при ре...

Основи Elixir

Elixir — це функційна мова програмування, яка працює на віртуальній машині Erlang (BEAM). Вона призначена для створення масштабованих і відмовостійких систем. Elixir успадкував багато переваг Erlang, таких як легкість паралельного програмування та висока доступність, але також додав сучасний синтаксис та інструменти для розробки. Основні концепції Elixir Elixir є функційною мовою, тому вона орієнтована на використання функцій та незмінних даних. Ось декілька ключових концепцій: Незмінність даних. Усі дані в Elixir є незмінними, що спрощує роботу з паралельними процесами. Функції. Функції є основним будівельним блоком програми. Вони можуть бути анонімними або іменованими. Паттерн-матчинг. Elixir використовує паттерн-матчинг для роботи з даними, що дозволяє легко розбирати структури даних. Процеси. Elixir використовує легкі процеси для паралельного виконання завдань. Ці процеси ізольовані та спілкуються через передачу повідомлень. Синтаксис Elixir Синтаксис Elixir є прос...

Основні поняття Apache Kafka

Producer - клієнт, який генерує (публікує) повідомлення в Kafka-топік. Може відправляти повідомлення в конкретну партицію (використовуючи ключ) або дозволяти Kafka автоматично вибирати партицію. Підтримує acknowledgments для підтвердження успішного запису. Consumer - клієнт, який читає повідомлення з Kafka-топіка. Консюмери об'єднуються в групи споживачів (consumer groups), щоб розподіляти навантаження. Кожна партиція обробляється лише одним консюмером у межах групи. Message - основна одиниця даних у Kafka. Складається з ключа (optional), значення (дані) та метаданих. Зберігається у партиції топіка. Topic - логічна категорія або ім'я каналу, через який Kafka передає дані. Дані в Kafka організовані в топіки. Кожен топік може мати одну або більше партицій. Споживачі (consumers) читають дані із заданих топіків. Partition - фізичний підрозділ топіка, який зберігає впорядковану послідовність повідомлень. Повідомлення у партиції мають унікальний offset (зміщення). Партиції р...

Регулярні вирази в JavaScript

Створення регулярних виразів Регулярні вирази в JavaScript можна створити одним із наступних способів: let reg1 = new RegExp("abc"); let reg2 = /abc/; Основні можливості та метод test() Метод test() дозволяє перевірити, чи відповідає наступний текст регялрному виразу. console.log(reg1.test("abcd")); //true console.log(reg2.test("abbcd")); //false Регуоярний вираз для перевірки наявності цифр в рядку: console.log(/[0-9]/.test("year 2025")); //true console.log(/[0-9]/.test("this year")); //false Часто використовуються наступні позначення: \d - будь-яка цифра \w - алфавітно-цифровий символ \s - пробільний символ (пробіл, табуляція, новий рядок) \D - не цифра \W - не алфавітно-цифровий символ \S - не пробільний символ . - будь-який символ окрім переведення рядка Для інверсії можна використати символ ^ . Наприклад: let notBinary = /[^01]/; console.log(notBinary.test("1040011210101110")); //tru...

Встановлення Elixir на Ubuntu

Мова програмування Erlang Erlang — це функційна мова програмування, створена в 1987 році шведською компанією Ericsson для розробки телекомунікаційних систем. Основною її метою є забезпечення високої надійності, масштабованості та паралельності, що робить її ідеальною для систем, які потребують обробки великої кількості одночасних запитів, наприклад, телефонні станції, месенджери або ігрові сервери. Головною особливістю Erlang є його модель акторів, яка використовується для паралельного програмування. Кожен процес в Erlang є незалежним і взаємодіє з іншими через передачу повідомлень, що забезпечує відмовостійкість та ізоляцію помилок. Це робить мову дуже ефективною для створення розподілених систем, де збої в одній частині програми не впливають на її інші компоненти. Erlang також має вбудовану підтримку гарячого оновлення коду, що дозволяє змінювати програму без зупинки її виконання, що є критично важливим для багатьох бізнесів. Мова програмування Elixir Elixir — це сучасна функ...

Структура Angular-проєкта

Структура нового проєкту: src/ - Ця директорія містить вихідний застосунку. Вона є основною робочою директорією для розробників. angular.json - Основний конфігураційний файл для Angular CLI, містить налаштування для компіляції, побудови та інших операцій. package.json - Файл, який містить інформацію про проєкт і його залежності. Використовується npm для управління пакетами. dependencies - секція, яка визначає залежності, необхідні для застосунку. devDependencies - секція, яка визначає залежності, необхідні тільки для розробки. tsconfig.json - Файл конфігурації TypeScript, який визначає налаштування компіляції TypeScript для проєкту. .editorconfig - Файл конфігурації для налаштування редактора коду. README.md - Файл з інформацією про проєкт. Зазвичай містить інструкції щодо запуску та використання застосунку. .gitignore - Файл, який визначає, які файли та директорії мають бути проігноровані системою контролю версій Git. src/ містить: app/ - Містить головний код за...

Генерація RSA-ключів на Ubuntu

Щоб згенерувати RSA-ключі в поточній директорії для входу на сервер по SSH, можна виконати наступні кроки: 1. Відкрити термінал. 2. Перейдіть у потрібну директорію, якщо ви ще не в ній: cd /шлях/до/потрібної/директорії 3. Виконати команду для генерації нового RSA ключа в поточній директорії: ssh-keygen -t rsa -b 4096 -C "ваша_електронна_пошта@example.com" -f ./id_rsa Пояснення параметрів: -t rsa: вказує тип ключа (RSA). -b 4096: задає довжину ключа (4096 біт). -C "ваша_електронна_пошта@example.com": додає коментар, зазвичай використовується ваша електронна пошта. -f ./id_rsa: вказує шлях і назву файлів для збереження ключів у поточній директорії (файли будуть названі id_rsa та id_rsa.pub). 4. Далі буде запропоновано створити парольну фразу для ключа. Mожна ввести її для додаткової безпеки або залишити порожньою, натиснувши Enter. Після виконання цих кроків, публічні і приватні ключі будуть збережені у поточній директорії. Щоб переглянути вміст публі...

Angular CLI

CLI (command-line interface) – інтерфейс командного рядка. Перед початком роботи має бути встановлений Node.js Встановлення: npm install -g @angular/cli Отримання допомоги: ng help Буде приблизно такий результат: add Adds support for an external library to your project. analytics Configures the gathering of Angular CLI usage metrics. See https://angular.io/cli/usage-analytics-gathering. build (b) Compiles an Angular app into an output directory named dist/ at the given output path. Must be executed from within a workspace directory. deploy Invokes the deploy builder for a specified project or for the default project in the workspace. config Retrieves or sets Angular configuration values in the angular.json file for the workspace. doc (d) Opens the official Angular documentation (angular.io) in a browser, and searches for a given keyword. e2e (e) Builds and serves an Angular app, then runs end-to-end tests. extract-i18n (i18n-extract, xi18n) Extracts i18n mes...

Створення потоків в Java

Потоки в Java Потоки в Java – це механізм, який дозволяє виконувати декілька завдань одночасно в одному процесі. Вони особливо корисні для програм, які потребують паралельного виконання задач, таких як обробка великих обсягів даних, обслуговування багатокористувацьких систем або робота з мережевими з'єднаннями. Потік (Thread) – це окремий шлях виконання в межах програми. Кожен потік має свій власний стек викликів, але розділяє спільну пам'ять з іншими потоками в межах одного процесу. Способи стверення Успадкування класу Thread та перевизначити метод run() : class MyThread extends Thread { public void run() { System.out.println("Потік працює!"); } } Реалізувати інтерфейс Runnable та перевизначити метод run() : class MyRunnable implements Runnable { public void run() { System.out.println("Потік працює"); } } Використати лямбда-вирази (Java 8+): Thread thread = new Thread(() -> System.out.println("Потік пра...

Робота SpringBoot 3 з базою даних Redis

Redis Redis (Remote Dictionary Server) — це in-memory база даних ключ-значення з відкритим вихідним кодом, що використовується для зберігання структурованих даних. Вона підтримує різні типи даних, такі як рядки, списки, множини, упорядковані множини з діапазонами, хеші, бітові масиви, потоки і т. д. Redis широко використовується для кешування, управління сесіями, систем обміну повідомленнями, черг задач та інших сценаріїв, що вимагають високої продуктивності і низької затримки. Redis з SpringBoot Розглянемо простий проєкт на SpringBoot, що використовує Redis, як базу даних. Створимо такий проєкт: Створимо entity Cat: import lombok.Data; import org.springframework.data.annotation.Id; import org.springframework.data.redis.core.RedisHash; @Data @RedisHash("cat") public class Cat { @Id private String id; private String name; private Integer age; public Cat(String name, Integer age) { this.name = name; this.age = age; } } Звер...