Kafka 概述

定义

Kafka 由ScalaJava编写,Kafka是一种高吞吐量的分布式发布-订阅消息系统.

  • 消息队列(mq) : 消息的传输过程中保存消息的容器 , 把要传输的数据放在队列中

  • 发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息

  • 默认端口: 9092

API

Kafka拥有三个非常重要的角色特性

  • 消息系统。与传统的消息队列或者消息系统类似。
  • 存储系统。可以把消息持久化到磁盘,有较好的容错性。
  • 流式处理平台。可以在流式记录产生时就进行处理。

消息队列的两种模式

两种类型的消息传递模式可用:

  • 点、对点模式 : 一个生产者+一个消费者+一个topic,会删除数据 不常用 # 一对一

消费者主动拉取数据,消息收到后清除消息

  • 发布-订阅模式 : 多个生产者+多个消费者+多个topic/相互独立,不会删除数据 # 多对多

基础架构

Kafka支持的主要应用场景

  • 削峰填谷”:所谓的“削峰填谷”就是指缓冲上下游瞬时突发流量,使其更平滑
  • 解耦 :即允许独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束
  • 异步通信:即允许把一个消息放入队列,但并不立即处理它们,然后再需要的时候才去处理它们。

Resource

Books List

Paper List

Projects

Presentation

Keynote Session | Kafka Summit London 2024

Question

面试|Kafka常见面试问题总结 | Jmx’s Blog

  • Kafka是如何保障数据不丢失的?

  • 如何解决Kafka数据丢失问题?

  • Kafka可以保障永久不丢失数据吗?

  • 如何保障Kafka中的消息是有序的?

  • 如何确定Kafka主题的分区数量?

  • 如何调整生产环境中Kafka主题的分区数量?

  • 如何重平衡Kafka集群?

  • 如何查看消费者组是否存在滞后消费?

Business Example

Reference