5分钟了解Kafka| 青训营

174 阅读3分钟

随着项目的深入,我们又用到了一项新技术——kafka来进行日志收集,快跟我快速了解一下kafka吧!😇

kafka.png

消息队列

当项目结构变大,组件间通信不再是简单的传值可以完成的,这时我们就要用到消息队列。消息队列是一种在应用程序之间传递消息的通信机制。它允许不同的应用程序、服务或组件之间通过异步方式进行通信,从而实现解耦、提高可扩展性和处理高并发的需求。(我在a程序内,不知道怎么通知b程序;我想好多人共享一份数据;快用消息队列吧!)

消息队列的优点:

  1. 解耦:消息队列允许不同的系统之间通过消息传递进行通信,而不需要直接调用或依赖彼此的实现细节。这种解耦有助于系统的灵活性和维护性。
  2. 异步通信:消息队列支持异步通信,发送者和接收者不需要同时在线。发送者将消息发送到队列中,而接收者可以在适当的时候从队列中取出并处理消息。
  3. 可靠性:许多消息队列系统提供持久性选项,确保消息在传递过程中不会丢失。这对于关键业务逻辑的消息通信非常重要。
  4. 扩展性:通过消息队列,你可以轻松地水平扩展应用程序,增加处理能力,以适应日益增长的负载。
  5. 削峰填谷:消息队列可以用于平滑处理峰值流量,将请求逐渐引导到后端系统,从而避免服务器超载。

Kafka

Apache Kafka 是目前应用最广泛的消息队列。它被设计用于高吞吐量、低延迟的数据传输,适用于日志收集、事件处理、实时分析等场景。以下是 Kafka 的一些关键特点:

  • 分布式架构:Kafka 可以部署在多个服务器上,形成一个分布式集群。这允许它实现高可用性、容错性和水平扩展。
  • 主题和分区:Kafka 中的数据组织成主题(Topic),每个主题可以分为多个分区(Partition)。分区允许数据水平分布和并行处理。
    • 同一topic的不同的partition(可在创建topic时指定partition个数),存储不同的数据,可通过设置key,相同key的内容存在一个partition;不设置key的话,会将数据依次存在多个partition中。
    • 每个partition有多个副本,其中负责用户读写操作的是Leader(主分支),其他副本(follower)负责不断同步主分支的数据。和主分支差的不太多的follower集合称为多个副本可用的集合被称为 "In-Sync Replicas"(ISR),每当主分支出现故障,则从ISR中取出一个分支暂时顶上去。
  • 持久性:Kafka 的消息是持久性的,它们可以持续存储在磁盘上,确保消息不会丢失。
  • 发布-订阅模型:Kafka 使用发布-订阅模型,允许生产者(Publisher)将消息发布到主题,然后消费者(Consumer)可以订阅这些主题以接收消息。
    • 同一消费者组的多个consumer不能消费同一个partition(为了保证消费数据不重复)
  • 高吞吐量:Kafka 的设计目标之一是支持高吞吐量的数据传输,适合处理大量的实时数据。
  • 多样的使用场景:Kafka 可以用于多种用途,包括日志收集、事件流处理、监控、指标收集、流式处理等。

Ending

最后提一句,如果使用在电商等对数据一致性高要求的需求时,最好采用rocketMQ。