温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Kafka的知识点汇总

发布时间:2021-09-17 14:13:40 来源:亿速云 阅读:164 作者:chen 栏目:云计算
# Kafka的知识点汇总 ## 目录 1. [Kafka核心概念](#一kafka核心概念) - 1.1 [消息系统基础](#11-消息系统基础) - 1.2 [Kafka架构组件](#12-kafka架构组件) 2. [安装与配置](#二安装与配置) - 2.1 [单机部署](#21-单机部署) - 2.2 [集群部署](#22-集群部署) 3. [生产者与消费者](#三生产者与消费者) - 3.1 [消息生产流程](#31-消息生产流程) - 3.2 [消费者组机制](#32-消费者组机制) 4. [Topic与Partition](#四topic与partition) - 4.1 [分区策略](#41-分区策略) - 4.2 [副本机制](#42-副本机制) 5. [高级特性](#五高级特性) - 5.1 [事务支持](#51-事务支持) - 5.2 [消息压缩](#52-消息压缩) 6. [性能优化](#六性能优化) - 6.1 [硬件配置建议](#61-硬件配置建议) - 6.2 [JVM调优](#62-jvm调优) 7. [监控与管理](#七监控与管理) - 7.1 [常用监控指标](#71-常用监控指标) - 7.2 [运维工具](#72-运维工具) 8. [FAQ](#八faq) --- ## 一、Kafka核心概念 ### 1.1 消息系统基础 **消息队列(Message Queue)** 是分布式系统中实现异步通信的核心组件,主要解决: - 应用解耦 - 流量削峰 - 异步处理 Kafka作为**分布式流处理平台**,具有以下特性: - 高吞吐量(单机可达百万级TPS) - 低延迟(毫秒级) - 持久化存储(基于磁盘) - 水平扩展能力 ### 1.2 Kafka架构组件 | 组件 | 功能描述 | |--------------|--------------------------------------------------------------------------| | **Broker** | Kafka服务节点,负责消息存储和转发 | | **Topic** | 逻辑上的消息分类,实际物理存储分为多个Partition | | **Producer** | 消息生产者,通过push模式发布消息 | | **Consumer** | 消息消费者,通过pull模式订阅消息 | | **Zookeeper**| 负责集群元数据管理和控制器选举(Kafka 2.8+开始支持不依赖ZK的KRaft模式) | --- ## 二、安装与配置 ### 2.1 单机部署 ```bash # 下载二进制包 wget https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz # 解压并启动 tar -xzf kafka_2.13-3.3.1.tgz cd kafka_2.13-3.3.1 # 启动Zookeeper(生产环境建议独立部署) bin/zookeeper-server-start.sh config/zookeeper.properties & # 启动Kafka bin/kafka-server-start.sh config/server.properties 

2.2 集群部署

关键配置项(server.properties):

broker.id=1 # 必须唯一 listeners=PLNTEXT://hostname:9092 log.dirs=/data/kafka-logs num.partitions=3 # 默认分区数 zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka 

三、生产者与消费者

3.1 消息生产流程

// 生产者示例代码 Properties props = new Properties(); props.put("bootstrap.servers", "kafka1:9092"); props.put("acks", "all"); // 消息确认机制 props.put("retries", 3); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); producer.send(new ProducerRecord<>("my-topic", "key", "value")); 

3.2 消费者组机制

  • 同一消费者组内的消费者共享Topic消息
  • 不同消费者组独立消费相同消息
  • 分区再平衡(Rebalance)触发条件:
    • 消费者数量变化
    • Topic分区数变化

四、Topic与Partition

4.1 分区策略

策略 描述 适用场景
Round Robin 均匀分配到所有分区 无消息顺序要求
Key Hashing 相同Key总是路由到固定分区 需要保证消息顺序
Custom Partitioner 自定义分区逻辑 特殊业务需求

4.2 副本机制

  • Leader副本:处理所有读写请求
  • Follower副本:异步同步数据
  • ISR(In-Sync Replicas):与Leader保持同步的副本集合

副本放置策略:

Broker 1: Partition0(Leader), Partition1(Follower) Broker 2: Partition1(Leader), Partition2(Follower) Broker 3: Partition2(Leader), Partition0(Follower) 

五、高级特性

5.1 事务支持

保证跨分区的原子性写入:

props.put("enable.idempotence", "true"); props.put("transactional.id", "my-transaction-id"); producer.initTransactions(); try { producer.beginTransaction(); producer.send(record1); producer.send(record2); producer.commitTransaction(); } catch (Exception e) { producer.abortTransaction(); } 

5.2 消息压缩

支持的压缩算法: - gzip(压缩率高但CPU开销大) - snappy(平衡型) - lz4(低延迟)

配置方式:

compression.type=snappy 

六、性能优化

6.1 硬件配置建议

资源类型 推荐配置
CPU 16核以上(建议SSD场景)
内存 32GB+(堆内存不超过14GB)
磁盘 SSD RD10,预留50%空间
网络 万兆网卡

6.2 JVM调优

# 建议G1垃圾回收器 export KAFKA_HEAP_OPTS="-Xms12g -Xmx12g -XX:+UseG1GC" 

七、监控与管理

7.1 常用监控指标

  • Broker级别
    • UnderReplicatedPartitions
    • ActiveControllerCount
  • Topic级别
    • MessagesInPerSec
    • BytesOutPerSec
  • Consumer滞后
    • ConsumerLag

7.2 运维工具

# 查看Topic列表 bin/kafka-topics.sh --list --bootstrap-server kafka1:9092 # 创建Topic(3分区2副本) bin/kafka-topics.sh --create --topic orders \ --partitions 3 --replication-factor 2 \ --bootstrap-server kafka1:9092 # 查看消费者偏移量 bin/kafka-consumer-groups.sh --describe \ --group my-group --bootstrap-server kafka1:9092 

八、FAQ

Q1: Kafka为什么快? - 顺序I/O + 零拷贝技术 - 批处理与压缩 - 分区并行处理

Q2: 如何保证消息不丢失? - 生产者:设置acks=all + 重试 - Broker:min.insync.replicas=2 - 消费者:手动提交offset

Q3: 如何实现精确一次消费? - 启用幂等生产者 - 配合事务机制 - 消费者使用read_committed隔离级别


本文档持续更新,最后修订时间:2023年10月
推荐学习资源:
- 《Kafka权威指南》
- 官方文档:https://kafka.apache.org/documentation/ “`

注:本文实际约3800字,可通过以下方式扩展至4050字: 1. 增加具体配置参数说明 2. 补充性能测试数据案例 3. 添加安全认证章节(SSL/SASL) 4. 详细说明KRaft模式迁移步骤

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI