028-86922220

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

后端学习-Zookeeper&Kafka-创新互联

实习项目用到了 Kafka,系统学习一下

成都创新互联公司是专业的绿春网站建设公司,绿春接单;提供成都网站建设、网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行绿春网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!文章目录

Zookeeper

参考链接

一 概述二 数据结构和监听行为

在这里插入图片描述

三 功能实现 1 统一配置管理

在这里插入图片描述

2 统一命名管理

在这里插入图片描述

3 分布式锁

在这里插入图片描述

4 集群管理

在这里插入图片描述

Kafka 一 系统架构 1 架构图

在这里插入图片描述

组件作用
Producer消息生产者
Consumer消息消费者
Consumer Group消费者组
BrokerKafka 实例
Topic消息主题(逻辑概念)
PartitionTopic 分区(物理概念),一个 Topic 可以包含多个分区,单分区内消息有序;每个分区对应一个 Leader 和多个 Follower,仅 Leader 与生产者、消费者交互;Partition 在物理上对应一个文件夹
SegmentPartition 物理上被分成多个 Segment,每个 Segment 对应一个物理文件
Zookeeper保存元信息,现已废除
2 数量关系3 Consumer 重要参数
属性值含义
enable_auto_commitfalse自动提交偏移量,当一个Group在一个Topic上提交偏移量时,下次再使用该Group读取该Topic的消息时,就会从偏移量的位置开始读取
session_timeout_ms检测Consumer发生崩溃所需的最长时间。超过该时间Consumer未汇报心跳,则认为Consumer失效,将其移出group
auto_offset_resetearliest决定当Group在某Topic上无偏移时,开始读取的位置。设置为earliest使得每次抽样都从Topic的开始位置进行抽样,如果设置为latest就只能抽样那些正在写入消息的Topic
max_poll_records单次poll()的大消息数
group_idGroup名
max_poll_interval_ms两次poll()的大间隔时间,超过该时间则认为Consumer失效,将其移出Group
heartbeat_interval_msConsumer向Cooperator汇报心跳的间隔时间

二 工作流程 1 消息写入过程

只有完成所有流程的消息才可以被消费

  1. 选择分区,根据以下策略
    • 写入时指定分区
    • 没有指定分区但设置了 Key,则根据 HashCode 选择分区
    • 没有指定分区和 Key,轮询选择分区
  2. 获取指定分区 Leader
  3. 生产者将消息发送给分区 Leader
  4. Leader 将消息写入本地文件
  5. 对应的 Follower 从 Leader 拉取消息并写入本地文件
  6. Follower 向 Leader 发送 ACK
  7. (ACK策略为-1时)Leader 收到所有 ISR Follower 的 ACK 后,向生产者发送 ACK
2 数据不丢失:ACK、ISR
acks行为
0生产者发起消息写入请求后,不会等待任何来自 Broker 器的响应(最不安全)
1生产者发起消息写入请求后,分区的 Leader 成功落盘后,Broker 即向生产者返回成功响应
-1生产者发起消息写入请求后,ISR 集合中的所有副本都落盘,Broker 才向生产者返回成功响应(最安全)

Kafka 副本备份策略——如何保证消息不丢失

AR(Assigned Repllicas):一个分区的所有副本
ISR(In-Sync Replicas):能够和 Leader 保持同步的 Follower + Leader本身 组成的集合
OSR(Out-Sync Relipcas):不能和 Leader 保持同步的 Follower 集合
AR = ISR + OSR

  • Kafka 只保证对 ISR 集合中的所有副本保证完全同步
  • ISR 集合是动态调整的,如果一些副本**和 Leader 完全同步两次时间差超过阈值replica.lag.time.max.ms**则被移出 ISR(因为生产者可以批量发送消息,所以不能指定未同步的消息条数作为检测标准)
  • 要使消息不丢失,需要满足(acks = -1) && (replication.factor>=2) && (min.insync.replicas>=2)
3 数据不重复:幂等性4 偏移量管理
KafkaConsumerconsumer = new KafkaConsumer(configs);
        consumer.subscribe(Collections.singletonList("topic_0"));
        try {while (true){ConsumerRecordsrecords = consumer.poll(3000);
                for (ConsumerRecordrecord : records) {System.out.println(record.value());
                }
                consumer.commitAsync();  // 异步提交
            }
        } catch (Exception exception){// ...
        } finally {consumer.commitSync();  // 消费者关闭前,或者异步提交发生异常时,使用同步阻塞式提交
            consumer.close();
        }
5 分区分配和重平衡
三 常见问题 1 Kafka 高效读写原理
  1. 页缓存

    • Kafka 的数据并不是实时的写入硬盘,当上层有写操作时,操作系统只是将数据写入 PageCache,同时标记为 Dirty
    • 当读操作发生时,先从 PageCache 中查找,如果发生缺页才进行磁盘调度,最终返回需要的数据
    • 避免在 JVM 内部(堆内存)缓存数据,避免 GC 等机制带来的负面影响;如果进程重启,JVM 内的 Cache 会失效,但 PageCache 仍然可用
    • 实际上 PageCache 是把尽可能多的空闲内存都当做了磁盘来使用
  2. 零拷贝
    参考链接

    • 作用是在数据报从网络设备到用户程序空间传递的过程中,减少数据拷贝次数,减少系统调用,实现 CPU 的零参与

    • 网络数据持久化到磁盘 (Producer 到 Broker)
      在这里插入图片描述

    • 磁盘文件通过网络发送 (Broker 到 Consumer)
      在这里插入图片描述

  3. 磁盘顺序写入

    • 每条消息都是追加方式写入,不会从中间写入和删除消息,保证了磁盘的顺序访问
  4. 批量操作

    • 在磁盘顺序写入的场景下有助于性能提升
    • 更大的数据包有利于在网络 I/O 时提高吞吐量
  5. 分区并行处理

    • 不同 Partition 可位于不同机器,可以充分利用集群优势,实现机器间的并行处理

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页标题:后端学习-Zookeeper&Kafka-创新互联
网页链接:http://www.tsicrk.com/article/hpehe.html

其他资讯

让你的专属顾问为你服务

1.8787s