持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第19天,点击查看活动详情 Kafka 是一款基于发布与订阅的消息系统的消息队列。一般称为“分布式提交日志”或“分布式流平台”。
发布/订阅模式
发布与订阅消息系统的大部分应用场景都是从一个简单的消息队列或一个进程间通道开始的。发布与订阅消息系统,数据发送者不会把消息直接发送给接收者,它以某种方式对消息进行分类。接收者(订阅者)通过订阅方式,接收到特定类型的消息。
使用场景:
-
活动跟踪
- kafka 最初使用场景是跟踪用户的活动。如页面访问次数和点击量,或添加用户信息等。
- 原理:用户在页面交互时,前端生成用户活动详细然后发送给 kafka,后端负责读取并处理
-
传递消息
- 应用向用户发送通知,邮件等消息
- 原理:应用发送消息时直接发送给 kafka,然后由一个公共程序读取消息,格式化消息,然后进行相应消息的消息发送
-
度量指标和日志记录
- kafka 支持用于收集应用程序和系统度量指标及日志。
- 原理:应用程序定期将度量指标发布到 kafka 上,然后由监控系统或报警系统读取消息;日志记录就是日志消息被路由到专门的日志搜索系统如 Elasticsearch 。即便更改目标系统(如日志存储系统)也不会影响应用程序。
-
提交日志
- 将数据库的更新发布到 kafka 上,应用程序通过监控事件流来接收数据库数据的实时更新。
-
流处理
- 操作实时数据流,通过使用流式处理框架,用户可以编写小型应用程序来操作Kafka消息,比如计算度量指标,为其他应用程序有效地处理消息分区,或者对来自多个数据源的消息进行转换。
优势
所以,kafka 本质上就是一个消息队列,在面试上经常会被问到其优势是什么?
- 解耦:部分业务解耦,拆分独立的服务处理
- 异步通信:实时性要求不高的,可通过异步处理,提高服务的高可用
- 可恢复性:某消息进程失效时,在重新恢复后会继续被处理
- 缓冲:消息队列通过缓冲层帮助任务最高效率的执行
- 灵活性 & 峰值处理能力:请求高峰时,消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃
Kafka 组成
-
消息:生产可以发送一条消息给 Kafka。那么对于 kafka 来说,
- 消息:消息就是 Kafka 数据单元,消息格式是字节数组(byte[])。
- 键:键是消息可选元数据,格式是字节数组(byte[])。消息写入到 kafka 的不同分区时,会使用到键。
为了提高效率,消息被分批次写入 Kafka 。即一组消息一个批次。因为如果每个消息都单独穿行于网络,就会导致大量的网络开销。所以分批次传输,批次越大,单位时间内处理的消息就越多,单个消息的传输时间就越长。
- 主题 Topic:Kafka 的消息通过主题进行分类。一个主题再划分多个分区。
- 生产者:消息生产者,向 Broker 发送消息的客户端
- 消费者:消息消费者,从 Broker 取消息的客户端
- Broker :一台 Kafka 机器就是一个 Broker。一个集群由多个 Broker 组成。一个 Broker 可以容纳多个 Topic。
附加: 参考资料:
- www.dockone.io/article/995…
- 《Kafka 权威指南》