Самая обстоятельная статья о концепции Кафки во всём Интернете, других нет.
Самая обстоятельная статья о концепции Кафки во всём Интернете, других нет.

Kafka, старший брат очереди сообщений, говорит об этом на своем официальном сайте, который действительно властен: более 80% из 100 крупнейших компаний мира доверяют и используют Kafka. В настоящее время Kafka имеет 27,6 тысяч звезд и 13,6 тысяч форков на GitHub.

More than 80% of all Fortune 100 companies trust, and use Kafka.

Привет всем, я брат Нэн.

Ваш руководитель по развитию Java в настоящее время открывает доступ к руководству по развитию Java, которое поможет вашим друзьям успешно конкурировать за крупные компании. Сегодняшнее руководство посвящено WebSocket. Следуйте за братом Наном и давайте продвигать Java.

Диаграмма исторических звездных трендов Кафки

Эта статья включена в мое «Руководство по собеседованию по изучению Java» с открытым исходным кодом, расширенное руководство по Java, охватывающее основные знания, необходимые Java-программистам, и ключевые моменты собеседований. Я считаю, что это может помочь вам перейти на Java и перейти в крупные компании. Брат Нэн надеется получить ваши отзывы ⭐ Star ⭐Поддержка,Это самая большая мотивация для моего творчества.,GitHubадрес:https://github.com/hdgaadd/JavaGetOffer

1. Концепция Кафки

1.1 Компоненты Кафки

Интервьюер: Можете ли вы сначала рассказать мне, из каких модулей состоит Kafka?

KafkaПо сути, это продукт, основанный наМодель публикации и подпискисистема обмена сообщениями,Если спроектировано в соответствии со здравым смыслом,Хотите отправить сообщение от отправителя напрямуюпотребитель сообщений?ноKafkaЭто не так задумано,Производитель сообщений Kafka будет классифицировать сообщения.,Затем отправьте его в систему службы промежуточных сообщений.,ипотребитель сообщений Получайте определенные типы сообщений, подписавшись на сообщения определенной категории.。

Фактически, целью этой конструкции также является удовлетворение потребностей в доступе к большому количеству бизнес-сообщений.,Если одно сообщение отправлено и получено,Это запускает процесструбная связьВот и все。Кроме того, если вы знакомы с шаблонами проектированиямодель публикации/подпискизнакомые слова,Будет легче понять концепцию дизайна Kafka.

в общем,Kafka состоит из пяти основных модулей.,Каждый должен понимать функции этих модулей: продюсер сообщений、потребитель сообщений、Broker、темаTopic、РазделPartition

(1) Производитель сообщений

Производитель сообщения является создателем сообщения. Каждое отправленное сообщение будет отправлено в определенную тему.

(2) Потребитель сообщения

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

(3)Broker

Развернуто в одиночку вLinuxизKafkaСервер называетсяBroker,Это то, что я упомянул вышеСистема обслуживания промежуточных сообщений,Не недооценивайте его,Одиночный блокBrokerможно легко справитьсяМиллионы в секундуиз消息量。BrokerСодержание ежедневной работы – получатьпродюсер сообщенийиз消息,Установить смещение для каждого сообщения,Наконец, он отправляется на диск для сохранения.

(4)темаTopic

Выше мы знаем, что сообщения Kafka засекречены.,и分类из标识就是темаTopic。Вы можете посмотреть конкретную реализацию кода, и ее будет легче понять.,продюсер сообщенийProducerотправить вclock-topicтема,потребитель сообщений Мониторинг потребленияclock-topicтема下из消息。

Язык кода:java
копировать
// продюсер сообщений
public class Producer implements ApplicationRunner {
    @Resource
    private RedissonClient redissonClient;
    @Resource
    private KafkaTemplate<String, String> kafkaTemplate;
    
    @Override
    public void run(ApplicationArguments args) throws Exception {
        RBlockingQueue<Clock> blockingFairQueue = redissonClient.getBlockingQueue("delay_queue");

        while (true) {
            Clock clock = blockingFairQueue.take();
            kafkaTemplate.send("clock-topic", "key", clock.toString());
            log.info("time out: {} , clock created: {}", new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()), clock.getTime());
        }
    }
}
Язык кода:java
копировать
    // потребитель сообщений
    @KafkaListener(topics = "clock-topic", groupId = "kafka-group")
    public void listener(ConsumerRecord<String, String> record, Acknowledgment ack) {
        log.info("listener get message: " + record.value());
        ack.acknowledge();
    }

(5)РазделPartition

Сообщения по каждой теме необходимо отправлять на диск Брокера.,Если мы построим кластер Kafka, состоящий из трех узлов Broker,Как правило, сообщения одной темы будут разделены на три раздела для хранения. Говоря об этом,Поскольку сообщения, отправленные последовательно, хранятся в разных Разделах,Мы не можем гарантировать, что сообщение будет кликнуто.Последовательное потребление,могу только гарантироватьтот же раздел下из消息被Последовательное потребление.

1.2 Раздел

Интервьюер: Что делает разбиение?

Потребление Разделиз作用主要就是для了提高Kafka处理消息изПропускная способность,Кто звонитKafkaИзначально он проектировался как высококачественный Пропускная способность、Высокая доступность、Масштабируемые приложения.

Предположим, что в теме есть N разделов и N потребителей.,Каждый Раздел отправит сообщение соответствующему потребителю.,такN个Потребление者就可以балансировка нагрузкиобрабатывать сообщения。

в то же времяпродюсер сообщенийбудет отправлять сообщения в разные Раздел,Каждый раздел принадлежит отдельному брокеру.,Это делаетBrokerкластерплоское давление,Значительно улучшена «Пропускная способность» Кафки.

Всем нужно обратить внимание еще на одну вещь,Если количество потребителей темы превышает количество Разделов,超过数量из Потребление者是会被праздныйиз,Как правило, N Раздел может быть сопоставлен не более чем N потребителям.

1.3 Асинхронный обратный вызов

Интервьюер: Вы знаете асинхронный обратный вызов производителя сообщения, верно?

Когда мы вызываем send() для асинхронной отправки сообщения,Вы можете указать функцию обратного вызова,Эта функция будет активирована, когда сервер брокера ответит. Как показано в исходном коде ниже,Мы можем предоставить параметры ответаListenableFutureДобавьте реализацию функции обратного вызоваcallback

Язык кода:java
копировать
    public ListenableFuture<SendResult<K, V>> send(String topic, K key, @Nullable V data) {
        ProducerRecord<K, V> producerRecord = new ProducerRecord(topic, key, data);
        return this.doSend(producerRecord);
    }

    public interface ListenableFuture<T> extends Future<T> {
       void addCallback(ListenableFutureCallback<? super T> callback);
    }

Так что же делает эта функция обратного вызова??Обычно мы используем его дляЗапись журнала исключений

KafkaизАсинхронная отправка сообщенийпо сравнению ссинхронное Для представления нет необходимости блокировать поток до ответа Брокера, что также в определенной степени повышает скорость обработки сообщений. Но Асинхронная отправка我们是不知道消息из Потребление情况из,Теперь вы можете пройтиKafka提供из回调函数来告知程序ненормальная ситуация,Это облегчает вход в программу.

2. Отправка сообщений потребителям

2.1 Как отправлять сообщения

Интервьюер: Можете ли вы сказать мне разницу между отправкой вручную и автоматической отправкой потребителями?

Ручная и автоматическая отправка — это два метода клиентской смещенной отправки Kafka.,提交方式из配置选项是enable.auto.commit,Эта опция верна по умолчанию.

Что такое коммит смещения?大家可以理解для Потребление者通知当前最新изпозиция чтениядавать Раздел,То есть сообщить Разделу, какие сообщения были использованы.

еслиenable.auto.commitдляtrue代表提交方式для自动提交,默认для5 секундиз提交时间间隔。Каждый раз5 секунд,Клиент-потребитель автоматически зафиксирует максимальное смещение.

еслиenable.auto.commitдляfalse代表提交方式для手动提交,我们需要让Потребление者客户端ПотреблениеПосле выполнения программы提交当前измаксимальное смещение。

2.2 Преимущества и недостатки метода подачи

Интервьюер: Каковы их преимущества и недостатки?

(1) Автоматическая подача

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

Если это произойдет 5 секундиз时间间隔自动Поданныймаксимальное смещение,В это время произошел сбой клиентского клиента, на котором выполнялась программа обмена сообщениями.,приведет кСообщение потеряно

Если сообщение успешно использовано,Потребитель должен автоматически отправить запрос в следующую секунду.,Но если потребительский клиент выйдет из строя в это время,приведет к其他Разделиз Потребление者Повторное потребление

(1) Подача вручную

Отправка вручную требует, чтобы клиент-потребитель вручную отправил сообщение после использования сообщения. Метод отправки вручную делится на синхронную отправку и асинхронную отправку.

Ручная подачасинхронное представлениеиз话,Прежде чем Брокер ответит на запрос,Клиент всегда будет заблокирован,такиз话限制应用程序изПропускная способность

Ручная подачаАсинхронная отправкаиз话,С Пропускной способностью проблем не будет. Однако после того, как клиент-потребитель отправит компенсацию Брокеру,ПлеватьBrokerВы получили сообщение?。这种情况就要采用上文我提到изпродюсер сообщенийАсинхронный обратный вызовдля регистрации,Записи журнала облегчают последующее устранение ошибок.,Эффективность работы действительно высокая😏.

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

Я участвую в последнем конкурсе эссе для специального учебного лагеря Tencent Technology Creation 2024. Приходите и разделите со мной приз!

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

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.