kafka工作原理介绍

本文介绍了Kafka的工作原理,包括Kafka中的术语,如Broker、Topic、Partition、Producer和Consumer,以及消息发送语义、可用性和一致性。Kafka通过Partition实现消息有序,通过Consumer Group实现消息的并发消费。它采用pull模式消费消息,保证了消息的持久性和高可用性,同时也探讨了其一致性策略和数据持久化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

两张图读懂kafka应用:



Kafka 中的术语

  •  broker:中间的kafka cluster,存储消息,是由多个server组成的集群。
  •  topic:kafka给消息提供的分类方式。broker用来存储不同topic的消息数据。
  •  producer:往broker中某个topic里面生产数据。
  •  consumer:从broker中某个topic获取数据。

Kafka 中的术语设计:

1、Broker

      中间的kafka cluster,存储消息,是由多个server组成的集群。


2、topic与消息

kafka将所有消息组织成多个topic的形式存储,而每个topic又可以拆分成多个partition,每个partition又由一个一个消息组成。每个消息都被标识了一个递增序列号代表其进来的先后顺序,并按顺序存储在partition中。



这样,消息就以一个个id的方式,组织起来。

  •  producer选择一个topic,生产消息,消息会通过分配策略append到某个partition末尾。
  •  consumer选择一个topic,通过id指定从哪个位置开始消费消息。消费完成之后保留id,下次可以从这个位置开始继续消费,也可以从其他任意位置开始消费。

上面的id在kafka中称为offset,这种组织和处理策略提供了如下好处:

  •  消费者可以根据需求,灵活指定offset消费。
  •  保证了消息不变性,为并发消费提供了线程安全的保证。每个consumer都保留自己的offset,互相之间不干扰,不存在线程安全问题。
  •  消息访问的并行高效性。每个topic中的消息被组织成多个partition,partition均匀分配到集群server中。生产、消费消息的时候,会被路由到指定partition,减少竞争,增加了程序的并行能力。
  •  增加消息系统的可伸缩性。每个topic中保留的消息可能非常庞大,通过partition将消息切分成多个子消息,并通过负责均衡策略将partition分配到不同server。这样当机器负载满的时候,通过扩容可以将消息重新均匀分配。
  •  保证消息可靠性。消息消费完成之后不会删除,可以通过重置offset重新消费,保证了消息不会丢失。
  •  
### Kafka 架构与工作流程详解 #### 1. Kafka 基本组件介绍 Kafka 主要由四个部分构成: - **Producer(生产者)**:负责创建消息并将这些消息投递给 Kafka 中的特定主题。生产者可以控制消息被发送到哪个分区[^2]。 - **Consumer(消费者)**:从 Kafka 订阅感兴趣的主题,并处理接收到的消息。消费者可以选择加入某个消费者组,以便实现负载均衡和容错能力。 - **Broker(代理/服务器节点)**:作为独立的服务实例运行,在大多数情况下代表单个物理机器上的 Kafka 安装。多个 broker 形成一个高可用性的 Kafka 集群。 - **ZooKeeper**:提供分布式协调服务,管理集群状态、配置信息和其他元数据,如主题定义及其分区情况等。 #### 2. 数据流动模式 Kafka 使用了一种基于日志结构化存储模型的设计理念,即所谓的“提交日志”。这种设计使得 Kafka 能够高效地支持大规模并发读写操作,同时也提供了良好的持久性和可恢复性特性[^3]。 当一条新消息到达时,它会被追加到对应 topic 下指定 partition 的末端位置;而 consumer 则按照自己设定的速度依次拉取未读过的记录进行消费。为了提高系统的吞吐量和服务质量,producer 和 consumer 不同的操作不会相互阻塞对方的工作进程[^1]。 #### 3. Leader-Follower 复制机制 在一个典型的 Kafka 配置里,每个 partition 都会有若干副本分布在不同 broker 上面。其中只有一个被称为 leader 的副本对外提供服务——接受来自 producer 发送的新条目以及响应 consumer 提交查询请求。其余 follower 只能被动等待复制最新的变更内容[^4]。 Leader 将接收到的数据项立即存入本地磁盘文件内,并通知所有跟随者尽快完成相同动作。由于此过程采用的是异步方式进行传播更新,因此即使某些 follower 出现延迟甚至暂时离线也不会影响整体功能正常运作。 此外,默认策略下 Kafka 努力确保各个 leader partition 平均分布在整个集群之中,从而达到资源利用效率最大化的目的[^5]。 ```python from kafka import KafkaProducer, KafkaConsumer # 创建生产者对象 producer = KafkaProducer(bootstrap_servers='localhost:9092') # 向名为 'test-topic' 的主题发送消息 future = producer.send('test-topic', b'some_message_bytes') result = future.get(timeout=60) # 关闭生产者连接 producer.close() # 创建消费者对象并订阅主题 consumer = KafkaConsumer( 'test-topic', bootstrap_servers=['localhost:9092'], auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group' ) for message in consumer: print(f"{message.topic}:{message.partition}:{message.offset}: key={message.key} value={message.value}") # 关闭消费者连接 consumer.close() ```
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值