kafka

本文探讨了Kafka快速处理数据的关键因素,包括数据分片的副本机制、使用堆外内存的pagecache、自动预热、零拷贝技术以及HDD和SSD的写入优化。同时提到了Kafka在Windows的适应性问题以及与MySQL连接数扩容对服务的影响。

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

安装

1.安装jdk:sudo apt-get install openjdk-8-jdk (kafka需要在jvm上运行)

验证安装结果:java -version

2.安装kafka:wget https://downloads.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz  (下载官网离线安装包)

解压:tar -xzf   ... -C  /usr/local  (解压到/usr/local目录下)

运行:

在kafka目录下启动zookeeper: bin/zookeeper-server-start.sh config/zookeeper.properties

启动kafka :bin/kafka-server-start.sh config/server.properties

查看kafka版本:bin/kafka-topics.sh --version

创建topic:bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test --partitions 1 --replication-factor 1

...

kafka为什么快

数据分片(每个topic会把数据切分为多个partition,每个partition有自己对应的副本保证可靠性,但是副本在leader partition down掉前不会提供服务)可以横向扩容

连续读速度快

kafka虽然跑在jvm上但是使用堆外内存(内核缓冲区内存)pagecache,所以不需要做内存回收。

kafka会自动预热,把数据加载到缓冲区里

pagecache:linux内核态缓存

虚拟内存空间:分配给进程的一个逻辑内存空间,通过操作系统的page table(页映射表)对应到物理内存。

kafka的windows适配性不好

kafka ack保证数据写到内存里,刷盘策略决定数据什么时候落盘,所以ack不能保证数据不会丢失。

零拷贝

减少内核态缓冲区到用户态缓冲区的cpu拷贝

dma拷贝:io到内核的拷贝

普通拷贝:

零拷贝:

producer的消息会包含key,来决定消息发送到哪个partition。

producer按批次发送数据,当数据停留指定时间或者数据达到一定量时,发送给kafka 中对应partition的leader 副本所在的broker节点的socket receive buffer;

socket通过network threads将数据包装成一个请求置入reque queue,然后通过一个IO线程写入到page cache,pagecache根据刷盘策略落盘;

为了保证落盘前的数据可靠性,会将数据备份到其他的broker上,(follower副本会向leader副本拉取数据,这些follower在leader 副本 down掉前,只做备份,不会被使用。)

副本备份完毕后,会发送给producer一个ack,其中可以在network threads控制消息的顺序(上一条消息存储失败,则下一条数据卡在socket receive buffer)

HDD(机械硬盘)和SSD的随机写与顺序写

HDD :随机写时间浪费在寻址和旋转盘片

SSD:写入数据时,需要先擦除一块物理地址,然后写入在这块地址上的一个page里;因此随机写浪费在擦出有用数据时的数据迁移,并且会造成盘碎片化。

混合云

私有云+公有云

私有云:企业自己建设并为内部提供服务,企业可以更严格地控制访问权限和数据管理。

公有云:第三方云厂商所拥有和运营,用户通过互联网使用这些服务;用户只有服务的使用权,数据的控制权相对较弱。

机器扩容 超过 mysql连接数 导致服务崩溃

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、付费专栏及课程。

余额充值