kafka

本文介绍了Kafka这一分布式流式处理平台,它具备发布订阅、容错持久化存储和数据处理功能,能解耦生产者和消费者。阐述了其topic、partition等概念,说明了消息流过程,还提及索引机制,数据会持久化到本地磁盘,通过index文件建立稀疏索引。

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

一。 简介

  1. Kafka是一个分布式的流式处理平台,主要包含三个功能:
    1. 发布和订阅数据,类似于消息队列或者企业中的消息传递系统
    2. 存储数据的时候有容错(分布式+复本机制)和持久化机制
    3. 数据产生的时候处理记录(数据),当数据出现,能处理数据
    4. 生产者和消费者解耦

应用:

1  构建可靠的数据传输的实时流管道

2 在转换或者响应数据流的时候构建实时流程序

 

kafka采用的是poll的方式的获取数据

 

概念:

1 topic  主题

  1. 在Kafka中 ,每一条数据都要归属于某个topic
  2. topic可以理解为在Kafka中进行消息的分类
  3. 每一个topic都会在磁盘中产生对应的目录
  4. topic从逻辑上可以将它看做是一个队列,所以向topic添加数据的时候可以认为是向队列的尾端来添加数据
  5. 其他的消息队列在数据被消费之后一般会从队列中来移除;但是Kafka默认不移除的

2 partition :  分区  

  1. 设置几个分区,那么对应的topic就会产生几个目录
  1. 如果有多个节点并且有多个分区,那么这些分区可以分布在不同的节点上

3 replication-factor : 复本因子

  1. 决定复本的数量
  2. 以分区作为单元来进行备份
  3. 在Kafka中,复本的数量不能超过节点的数量

 

4 当在Kafka中删除topic的时候,不是立即删除

5 如果存在多个分区,那么将数据轮流发到分区中

6 复本之间会选举一个leader,生产者和消费者在操作数据的时候,只和leader交互,也就意味着生产者产生的数据直接放入leader中,消费者直接从leader中拿数据。leader和follower之间会自动进行同步备份

7 在Kafka集群中,没有选举的问题

8 消费者组:将一个或者多个消费者放在同一个组中。如果有消费者组,那么形成组间共享(不同的消费者组可以获取到相同的数据)组内竞争(同一个消费者组中的不同消费者会抢占数据)的特点

 

kafka消息流过程:

  1. 生产者产生数据之后,Kafka需要将数据拉取过来
  2. 访问Zookeeper,获取到复本所对应的leader所在的节点对应的brokerid
  3. 将操作记录到节点的日志中,下一步将数据放到这个节点上
  4. follower通过RPC机制来访问leader,做到数据的一致。当leader和follower之间的信息共享完成之后,follower会给leader返回一个ack表示共享成功
  5. leader也会给生产者发送一个ack信号表示数据已经存储成功

索引机制:

  1. Kafka每接收一条数据,都会将数据持久化到本地的磁盘上,将数据存储在对应的partition下的log文件里面
  2. log文件默认是1G大小,当数据量超过log文件大小,就会产生一个新的log文件
  3. 每一次产生log文件之后,都会以数据偏移量作为log文件的文件名,每一个log文件都会对应一个index文件(log文件+index文件 = segment)
  4. index文件对log文件中的数据建立了稀疏索引,所以当查询数据的时候先找到对应的index文件,然后利用稀疏索引确定数据在log文件中的范围

 

 

 

 

06-07
### Kafka 使用教程和核心技术详解 Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,并于 2011 年开源。它被设计为高吞吐量、低延迟的消息系统,广泛用于日志收集、监控据聚合、流式据处理等领域[^1]。 #### Kafka 的核心概念 Kafka 的架构围绕几个关键概念展开: - **主题(Topic)**:Kafka 中消息的类别或提要名称。生产者将消息发布到特定主题,消费者从主题中订阅消息。 - **分区(Partition)**:每个主题可以划分为多个分区,分区是 Kafka 中并行处理的基础单位。 - **副本(Replica)**:为了提高可靠性,Kafka 会为每个分区创建多个副本,分布在不同的 Broker 上。 - **消费者组(Consumer Group)**:消费者可以组成一个组来共同消费一个主题的消息,组内的每个消费者负责处理一部分分区的消息[^2]。 #### Kafka 的使用方法 Kafka 提供了多种客户端库以支持不同编程语言的开发。以下是一个简单的 Python 示例,展示如何使用 Kafka 生产者和消费者: ```python from kafka import KafkaProducer, KafkaConsumer # 创建 Kafka 生产者 producer = KafkaProducer(bootstrap_servers='localhost:9092') # 发送消息到指定主题 producer.send('my-topic', b'Hello, Kafka!') producer.flush() producer.close() # 创建 Kafka 消费者 consumer = KafkaConsumer( 'my-topic', bootstrap_servers='localhost:9092', auto_offset_reset='earliest', enable_auto_commit=True, group_id='my-group' ) # 消费消息 for message in consumer: print(f"Received message: {message.value.decode('utf-8')}") ``` #### Kafka 的核心技术详解 Kafka 的核心技术主要包括以下几个方面: - **持久化日志**:Kafka 将消息存储在磁盘上,并通过顺序写入操作优化性能。这种设计使得 Kafka 能够提供高吞吐量和持久性保证。 - **分区与并行性**:通过将主题划分为多个分区,Kafka 实现了水平扩展的能力。每个分区可以独立地被多个消费者消费。 - **复制机制**:Kafka 的复制机制确保了即使某些 Broker 出现故障,据仍然可用。领导者分区负责读写操作,而跟随者分区则同步据[^3]。 - **消费者偏移量管理**:Kafka 允许消费者自行管理偏移量,这为灵活的消费模式提供了支持,例如重新消费旧消息或跳过某些消息。 #### Kafka 的学习资料 对于初学者,可以从官方文档入手,了解 Kafka 的基本概念和配置选项。此外,还有许多在线课程和书籍可以帮助深入理解 Kafka 的原理和实践[^4]。 ```markdown - 官方文档: https://kafka.apache.org/documentation/ - 在线课程: Coursera、Udemy 等平台提供的 Kafka 课程 - 推荐书籍: "Kafka: The Definitive Guide" by Neha Narkhede, Gwen Shapira, and Todd Palino ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值