kafka介绍(一)

0.0 什么是MQ

这个部分,需要简单的解答一下,其实MQ就是消息队列,那么本质上,就是一个 FIFO的队列数据结构。

因此,早期的使用方法,都是启动一个线程发送消息,写入消息队列,作为消息缓存,然后再启动一个线程消费消息。早期的windows程序(桌面程序)的设计方法。

后期,随着分布式微服务的快速发展,消息这个东西变成了组件,变成了中间件,直接分离出来使用了。

1.0 为什么需要Kafka

其实从需要kafka的角度,不如从需要MQ的角度来说.

从本质上来讲,是因为互联网发展太快,使用单体架构无疑会是的体量巨大。而微服务架构可以很好的解决这个问题,但是服务与服务之间会还是出现耦合、访问控制等问题。消息队列可以很好的满足这些需要。重要场景:

异步处理:

随着业务的不断扩展,通常会在原来的业务上不断地添加新的服务,这样会导致请求的链路非常长。比如,最开始电商,只需要处理下单,扣库存,后来处理积分,短信通知等等。再比如我们自己的业务,最开始只需要处理数据处理,后来需要监控数据分析,再后来需要输出报表清单。

而这些业务的共同特点就是及时性,要求不是那么的高。

所以只需要在下单结束的时候结束那个流程,把消息传给消息队列中就可以直接返回响应了。而且短信服务和积分服务可以并行的消费这条消息。这样响应的速度更快,用户体验更好服务异步执行,系统整体latency(相对使用同步机制而言)也下降了

服务解耦

在采用API的模式下,可能会出现API格式的定义问题,对于任何API的改变,都有可能影响到原来的服务,尤其是在后续不断增加业务的情况下,就会出现这样的情况。所以这个时候,采用MQ就是最好的过程。

说明一下,服务的解耦,绝对不是简单的API调用问题,更多的可能是API调用的不确定性问题。比如调用深度的问题,也就是API聚合问题,还有就是

上面说的新加了短信服务和积分服务,现在又需要添加数据分析服务、以后可能又加一个策略服务等。可以发现订单的后续链路一直在增加,为了适配这些功能,就需要不断的修改订单服务,下游任何一个服务的接口改变都可能会影响到订单服务。

流量治理

后端服务相对而言是比较脆弱的,因为业务较重,处理时间长。如果碰到高QPS情况,很容易顶不住。比如说题库数据写入到ES索引中,数据都是千万级别的。这个时候使用中间件来做一层缓冲,消息队列是个很不错的选择。

2.0 kafka介绍

kafka是一款分布式、支持分区的、多副本,基于zookeeper协调的分布式消息系统。最大的特性就是可以实时处理大量数据来满足需求。

因为他是分布式的,所以可以很好的扩容,多副本保持,高吞吐量。这些决定了他的效率特别高。

3.0 使用场景

1、日志收集,可以用kafka进行日志收集,收集各个服务的日志,通过统一接口发送给不同的消费者。

2、用户追踪,可以使用kafka进行用户各种活动的最终,比如浏览页面,点击活动

3、运营指标,用于完成各种运营指标的监视

4、消息队列,解耦生产者和消费者,缓存消息

5、临时数据库,因为他可以实现多副本,保证了数据的不丢失,所以是可以作为副本实用的。

注意:随着新版本的kafka去掉了zookeeper,是的kafka可以单独使用,简化了复杂度,从而可以替代rabbitMQ的地步。

4.0 kafka版本

Apache自从接受LinkedIn捐赠Kafka之后,于2012年1月4日对外正式发布0.7这个版本,10年后的今天,Kafka已经陆续发布了46个版本 仔细研究发现Kafka目前总共演进了7个大版本,分别是0.7、0.8、0.9、0.10、0.11、1.0和2.0,比如2.0大版本中,期间历经了19个小版本,目前2.8.0去除对ZooKeeper的依赖算是一个大的更新

我们整理了一张图,用来阐述Kafka更新中有几个里程碑的一些特性,希望可以帮助大家更好的选择Kafka版本

5.0 架构说明

  1. Producer : 消息生产者,就是向 Kafka发送数据 ;

  2. Consumer : 消息消费者,从 Kafka broker 取消息的客户端;

  3. Consumer Group (CG): 消费者组,由多个 consumer 组成。 消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。 所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。

  4. Broker :经纪人 一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。

  5. Topic : 话题,可以理解为一个队列, 生产者和消费者面向的都是一个 topic;

  6. Partition: 为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;如果一个topic中的partition有5个,那么topic的并发度为5.

  7. Replica: 副本(Replication),为保证集群中的某个节点发生故障时, 该节点上的 partition 数据不丢失,且 Kafka仍然能够继续工作, Kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本,一个 leader 和若干个 follower。

  8. Leader: 每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。

  9. Follower: 每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。 leader 发生故障时,某个 Follower 会成为新的 leader。

  10. Offset:每个Consumer 消费的信息都会有自己的序号,我们称作当前队列的offset。即

    消费点位标识消费到的位置。

<think>嗯,用户想了解Apache Kafka的基本概念和核心功能。首先,我需要回忆Kafka的定义和主要用途。Kafka分布式流处理平台,主要用于处理实时数据流,支持发布-订阅模式,这在消息队列系统中很常见。根据引用[1]和[3],Kafka具有高吞吐量、可扩展性和容错性,适合企业级消息传递和大规模数据处理。 接下来,核心功能方面,用户可能需要知道Kafka的四个核心API,如生产者API、消费者API等,这些在引用[1]和[4]里提到过。另外,Kafka的架构包括Broker、Topic、Partition这些概念,需要详细解释。比如,Topic是消息的分类,Partition用于横向扩展和并行处理,引用[3]和[4]中的信息可以支持这部分内容。 用户可能还会关心Kafka的存储机制,比如它的高性能存储模块,这部分在引用[3]里有提到。另外,Kafka与其他系统的集成能力,比如通过Kafka Connect进行数据导入导出,以及流处理能力如Kafka Streams,这些也是核心功能的部分。 需要注意的是,用户的问题可能涉及Kafka分布式特性,比如ZooKeeper的作用和KRaft模式的引入,引用[5]中提到Kafka 3.0开始使用KRaft替代ZooKeeper,这点要说明清楚。 此外,应用场景部分需要举例说明,比如在微服务架构中的异步通信,日志聚合,实时分析等,引用[4]中的例子可以作为参考。还要提到Kafka在数据管道中的作用,连接不同系统进行数据流转。 最后,生成相关问题时要覆盖用户可能进步想了解的内容,比如架构组件、消息模式、存储机制、ZooKeeper和KRaft的区别,以及应用场景。确保问题有针对性,帮助用户深入理解Kafka的不同方面。</think>### Apache Kafka 简介及核心功能 #### 1. **基本概念** Apache Kafka个**分布式流处理平台**,主要用于实时数据流的处理、存储和传输。其核心设计目标是实现高吞吐量、水平扩展和容错能力,适用于大规模数据处理场景[^1][^3]。 #### 2. **核心功能** - **分布式流系统** Kafka 通过分布式架构将数据分片存储在多个节点(Broker)上,支持横向扩展。每个 Topic 分为多个 Partition,每个 Partition 可在不同 Broker 上复制以提高容错性[^3][^5]。 - **发布-订阅模式** 生产者(Producer)将消息发布到 Topic,消费者(Consumer)订阅 Topic 并按需消费消息。例如,微服务中可用 Kafka 实现服务间异步通信,确保解耦和可靠传输[^4]。 - **高性能存储** Kafka 采用顺序读写和零拷贝技术优化磁盘 I/O,支持高吞吐量(百万级消息/秒)。数据按时间或大小策略持久化存储,便于回溯和批量处理。 - **流处理能力** 通过 Kafka Streams API 或集成外部框架(如 Flink),可直接对数据流进行实时处理(如聚合、过滤)。 #### 3. **核心组件** - **Broker**:Kafka 集群中的单个节点,负责消息存储和转发。 - **Topic**:逻辑上的消息分类,例如 `user_activity` 或 `payment_events`。 - **Partition**:Topic 的分区,每个 Partition 是个有序、不可变的消息队列。 - **Producer/Consumer**:生产者推送消息到 Topic,消费者按需拉取消息[^3]。 #### 4. **关键特性** - **容错性**:通过副本机制(Replication)保障数据可靠性,即使部分节点故障,数据仍可用。 - **扩展性**:新增 Broker 可自动分配负载,无需停机。 - **持久化**:消息可配置保留时间(如 7 天),支持历史数据重放[^3]。 #### 5. **应用场景** - **日志聚合**:集中收集多服务的日志数据。 - **实时分析**:结合流处理框架进行实时指标计算(如用户行为分析)。 - **事件溯源**:记录系统状态变化事件,用于审计或回放[^4]。 ```plaintext 示例架构: 生产者 → Kafka Topic(Partition 1, Partition 2) → 消费者组 ``` #### 6. **生态集成** - **Kafka Connect**:工具库,支持与数据库、Hadoop 等系统集成。 - **KRaft 模式**:Kafka 3.0+ 版本支持去 ZooKeeper 的元数据管理,简化集群运维。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值