Чтобы освоить дело Кафки, просто прочитайте эту статью
Чтобы освоить дело Кафки, просто прочитайте эту статью

Сначала, а затем прочитайте, Брат Нэн поможет вам получить более половины ваших навыков Java.

Транзакция Кафкина самом деле представилАтомная многораздельная записьконцепция,Federico ValeriПодкастер нарисовал следующую блок-схему.,Показывает, как транзакции работают на уровне раздела.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Я брат Нэн, лидер в области изучения и развития Java. Я думаю, вам будет полезно пройти собеседование и получить предложение поступить в нужную вам компанию.

⭐⭐⭐Эта статья включена в《Javaизучать/Передовой/Руководство по собеседованию》:https://github..JavaSouth

1. Транзакции Кафки

1.1 Что такое транзакция Kafka?

Интервьюер: Можете ли вы рассказать мне о делах Кафки?

Транзакции Kafka в основном используются в потоковых приложениях. Потоковая передача? Это звучит очень запутанно, и я не знаю, что это такое.

Транзакция Стриминг при поддержке Кафкииметь дело Обычно процесс выглядит следующим образом. Программа A получает сообщение из темы A и обрабатывает это сообщение. дело сназад,Затем напишите результаты в тему Б.,назад ПродолжениеBПрограмма будетBСообщение темы осуществляется Потребление。То естьПотребление - иметь дело с - Производствопроцесс。

Такой процесс предполагает потребление двух сообщений и создание одного сообщения. Как обеспечить транзакционный характер всего процесса и сделать весь процесс успешным или неудачным — вот что делают транзакции Kafka.

Брат Нэн нарисовал блок-схему, чтобы помочь всем понять.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

1.2 Повторная проблема с потреблением

Интервьюер: В чем проблема не использовать транзакции в процессе, о котором вы говорите?

Потоковое вещание дело спроцедурныйПотребление - иметь дело с - Производствопроцесс,Если нет гарантии сделки,Могут возникнуть проблемы с повторным потреблением нескольких сообщений.,Это вызовет всевозможные странные проблемы.

Весь процесс оплаты включает в себя множество процессов, особенно в финансовой и платежной отраслях, например, размещение заказов пользователями. -> Проверка инвентаря -> Заказать иметь дело с-> Фактический вычет -> Клиринг и расчеты, эти бизнес-сценарии используют потоковую передачу. дело программа. В бизнес-сценариях, связанных с фондами, защита дел еще важнее! !

Позвольте мне рассказать о сценарии многократного потребления двух сообщений.

Давайте возьмем приведенный выше сценарий в качестве примера:Программа потребляет сообщения A из темы A.,После выполнения иметь дело с сообщением,Затем напишите результаты в тему Б.,назад ПродолжениеBПрограмма будетBСообщение темы осуществляется Потребление。

(1) Повторное потребление, вызванное сбоем программы.

еслиAпрограмма После выполнения иметь дело с сообщением,Напишите результат вBтема。ноЗафиксировать компенсациюразбился, когда,В это время Кафка будет думать, что сообщение А еще не использовано.,иAпрограммарухнулKafkaназначит раздел новому Потребление ВОЗ。

Возникает проблема. Новый потребитель снова воспользуется сообщением A, а это означает, что в тему B записываются два одинаковых сообщения, а сообщение A используется дважды.

(2) Повторное потребление, вызванное программами-зомби.

Если потребительская программа думает, что она не мертва, но после прекращения отправки сигналов Kafka в течение определенного периода времени Kafka думает, что она мертва, такая программа называется программой-зомби.

После того, как программа A прочитает сообщение от Kafka, она временно зависает. Она теряет соединение с Kafka и не может фиксировать смещения. В это время Кафка считает, что он мертв, и распределяет потребление A среди новых потребителей.

Однако после последующего восстановления программы A она продолжит записывать сообщения A в тему B, что по-прежнему приводит к двойному расходованию потребления A.

Возможно, многие люди скажут,Этот процесс имеет проблему повторного потребления,Чтоиметь дело с Проблемы повторного потребления недостаточно, нет необходимости вводить Транзакцию Кафки такой сложный. Но в таких строгих и важных бизнес-сценариях, как финансы и платежи, мы хотим, чтобы даже если во всем процессе произойдет небольшая ошибка, весь процесс был успешным. дело с Все процессы необходимо откатить.

1.3 Проблема невозможности обработки транзакций Kafka

Интервьюер: Транзакция Кафки Есть ли вопросы о том, не может ли Транзакция Кафки иметь дело с?

Конечно на протяжении всей Транзакции В процессе Кафки есть определенные операции, которые нельзя откатить. Кафки не поддерживает иметь дело с., давайте посмотрим.

(1) Процесс транзакции Kafka добавляет внешнюю логику

НапримерAпрограмма ПотреблениеинформацияAпроцесссередина,Отправил уведомление по электронной почте,Вся эта внешняя операция необратима.,Не в бизнесе дело в диапазоне с.

(2) Прочитайте сообщение Kafka и запишите его в базу данных.

На самом деле это также можно рассматривать как внешнее преимущество. дело сLogic, транзакции базы данных отсутствуют в Транзакции Кафкиизиметь дело в диапазоне с.

1.4 SpringBoot использует транзакции Kafka

Интервьюер: Вы когда-нибудь использовали SpringBoot для отправки транзакционных сообщений Kafka?

В проекте SpringBoot мы можем легко использовать Транзакцию. Кафки,При поддержке Транзакция Кафки,мы можем гарантироватьОтправка сообщений и компенсационная отправкатранзакционный,отиизбегайте вышеперечисленногоиз Повторяющаяся проблема с потреблением。

(1)Сначала представьspring-kafkaполагаться

Язык кода:xml
копировать
<dependencies>
    <dependency>
        <groupId>org.springframework.kafka</groupId>
        <artifactId>spring-kafka</artifactId>
        <version>xxx</version>
    </dependency>
</dependencies>

(2) Настройте менеджер транзакций Kafka и фабрику производителей.

Язык кода:java
копировать
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.core.ProducerFactory;
import org.springframework.kafka.transaction.KafkaTransactionManager;
import org.springframework.kafka.support.serializer.JsonSerializer;
import org.apache.kafka.common.serialization.StringSerializer;
import org.springframework.kafka.core.DefaultKafkaProducerFactory;

import java.util.HashMap;
import java.util.Map;

@Configuration
public class KafkaProducerConfig {

    @Bean
    public ProducerFactory<String, Object> producerFactory() {
        Map<String, Object> configProps = new HashMap<>();
        configProps.put(org.apache.kafka.clients.producer.ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        configProps.put(org.apache.kafka.clients.producer.ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
        configProps.put(org.apache.kafka.clients.producer.ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
        configProps.put(org.apache.kafka.clients.producer.ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, true);
        configProps.put(org.apache.kafka.clients.producer.ProducerConfig.TRANSACTIONAL_ID_CONFIG, "tx-");
        
        DefaultKafkaProducerFactory<String, Object> factory = new DefaultKafkaProducerFactory<>(configProps);
        factory.setTransactionIdPrefix("tran-");
        return factory;
    }

    @Bean
    public KafkaTransactionManager<String, Object> transactionManager(ProducerFactory<String, Object> producerFactory) {
        return new KafkaTransactionManager<>(producerFactory);
    }

    @Bean
    public KafkaTemplate<String, Object> kafkaTemplate(ProducerFactory<String, Object> producerFactory) {
        return new KafkaTemplate<>(producerFactory);
    }
}

(3)использоватьKafkaTemplateОтправить транзакционныйинформация

Язык кода:java
копировать
import org.springframework.kafka.annotation.EnableKafka;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@EnableKafka
@Service
public class KafkaConsumerService {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    @Transactional
    @KafkaListener(topics = "A")
    public void processMessage(String message) {
        // иметь дело с Сообщение получено из темы А
        String processedMessage = "Processed " + message;
        // Воляиметь дело Сообщение после с отправляется в тему B
        kafkaTemplate.send("B", processedMessage);
        // Зафиксируйте транзакцию, гарантируя, что отправка сообщения и фиксация смещения выполняются одновременно.
    }
}

Нажмите здесь, «JavaSouth» — это «Руководство по расширенному обучению Java», охватывающее основные знания, необходимые Java-программистам, и ключевые моменты собеседований.

Вставьте сюда описание изображения
Вставьте сюда описание изображения

Я Брат Нэн, Нэн — это Нэн. Я нашла ваши интересные комментарии на Get➕Like➕Follow.

Творить непросто, поэтому вы можете ставить лайки, собирать и подписываться, чтобы поддержать его. Ваша поддержка — самая большая мотивация для моего творчества.❤️

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose