Kafka新特性:引领大数据时代,助力企业实时数据处理与分析

444 阅读6分钟

概述


上个月kafka刚刚更新了新版本3.6.0,下面一起来看下最新特性有哪些改动。

新增

Kafka 3.6.0版本新增了一些功能,以下是一些主要的新增功能:

image.png

由上文可知 新增的功能有:

  • Kafka 分层存储
  • KRaft 元数据事务
  • 现代化 Connect 插件发现
  • 添加 connect-plugin-path 命令行工具
  • 添加 plugin.discovery 工作程序配置
  • 在 connect-plugin-path 工具中添加 sync-manifests 子命令

改进

image.png

由上文可知 改进的功能有:

  • 支持 Kafka Connect 中的偏移复位功能
  • Admin.deleteRecords 在无法获取元数据时应重试
  • 拆分分区会导致使用 auto.offset.reset=latest 的使用者丢失消息
  • 接受具有相同端口但使用 IPv4 与 IPv6 的监听器
  • Sink Connectors:支持异步连接器的主题变异 SMT(preCommit 用户)
  • 在出现 InvalidReplicationFactorException 的情况下重试连接内部主题的创建
  • 更新文档以包含 kafka-topics.sh 的 topicId --describe 输出
  • 优化远程层登录大小的计算
  • 通过用分区信息映射替换集群元数据来简化 StreamsMetadataState
  • 将 Zookeeper 升级到 3.8.2
  • 在文档中包含 MirrorMaker 连接器配置
  • 将 connect/mirror/README.md 中的内容移至文档
  • 提高主题数下的 KRaft 元数据图像更改性能
  • 改进示例包下的 kafka 示例
  • 提高 VarInt 编码/解码的性能
  • 为 PartitionRegistration 创建构建器类
  • 从 StandardAuthorizer 中删除 R/W 锁
  • 当代理关闭时,控制器模块需要删除其指标
  • 当replicaManager关闭时删除一些被遗忘的指标
  • 删除 Log Cleaner 关闭的指标
  • 为流表连接添加宽限期
  • 重构客户端代码以减少样板文件
  • 减少 CompletedFetch#parseRecord() 内存复制
  • 改进 kafka-metadata-quorum 输出
  • 将 scalaCollectionCompact 升级到 v2.9,以应对 CVE-2022-36944
  • 改进生产者的记录时间戳验证
  • 改进从 RSM 复制和获取时的 TransactionIndex 实例处理。
  • 改进长列表的 ReplaceField 性能
  • 调用 getFinalizedFeatures 时 Kraft 领导者更改失败
  • 降低 PartitionChangeBuilder.tryElection() 中跟踪的日志记录级别
  • 当监听器位于日志开头时,KRaft 应该更喜欢快照
  • 当获取偏移量 0 时,KRaft 领导者应使用 SnapshotId 进行响应
  • 使 Timer.java 实现 AutoCloseable
  • 远程日志段的附加自定义元数据
  • FileStreamSourceConnector 和 FileStreamSinkConnector 应该实现 KIP-875 API (alterOffsets)
  • 添加 ChunkedBytesStream 测试
  • 更改范围查询以接受 null 下限和上限
  • 删除主题时删除远程段
  • 改进 RemoteStorageManager 异常处理文档
  • 优化 MirrorCheckpointConnectorSet.removeAll(List) 的性能
  • log4j2 的 CPU 使用率过高
  • 使用 Python is 而不是 == 来比较 None
  • 按照 Python 中的 PEP 8 最佳实践检查容器是否为空
  • 更新次要依赖项,为 3.5.1 做准备
  • MirrorMaker 2 应该实现 alterOffsets KIP-875 API
  • 在调用 SourceConnector::alterOffsets 之前标准化偏移量
  • 添加更多控制器、加载器、快照发射器指标
  • 提供 QuorumController.replay 的精确偏移量
  • 支持 KRaft 中的委托令牌
  • 将锌Scala增量编译器插件版本升级到最新的稳定版本(1.9.2)
  • 改进分层存储指标
  • 在通用 Connect 插件中实现版本化接口
  • 连接插件Javadocs应该提到serviceloader清单

重要功能


  • 将 Kafka 集群从 ZooKeeper 元数据系统迁移到 KRaft 元数据系统的功能现在已准备就绪,可在生产环境中使用。
  • 在 3.6 中完成了对 KRaft (KAFKA-15219) 中委托令牌的支持,进一步缩小了基于 ZooKeeper 的 Kafka 集群和 KRaft 之间的功能差距。
  • Kafka 分层存储(抢先体验)。它目前仅适用于在非生产环境中进行测试。(将分层存储引入 Kafka。此功能在代理中提供了计算和存储的分离,以便在 Kafka 分层存储中原生实现可插拔存储分层,从而以最小的操作更改将存储无缝扩展到远程对象。)

分层存储

  分层存储的基本理念是,将数据存储任务与数据处理任务分开,以便于数据存储层和数据处理层的独立扩展。

  核心思想是将处理器频繁需要的数据存放在读写速度较快、价格较高的存储层,而将不活跃的数据文件存储到较慢、廉价且容量大的存储设备中。

集群配置


  • 在分层存储方法中,Kafka 集群配置了两层存储 - 本地和远程。

    • 本地层与当前 Kafka 相同(Kafka服务器在本地磁盘上的存储机制)

    • 远程层使用 Kafka 代理上的本地磁盘来存储日志段。

  • 新的远程层使用 HDFS 或 S3 等系统来存储已完成的日志段。定义了两个单独的保留期,分别对应于每个层。

    • 启用远程层后,本地层的保留期可以从几天显著缩短到几小时。
    • 远程层的保留期可能更长、数天甚至数月。
    • 当日志段在本地层上滚动时,该日志段将与相应的索引一起复制到远程层。
    • 延迟敏感型应用程序执行尾部读取,并从本地层提供服务,利用现有的 Kafka 机制有效地使用页面缓存来提供数据。
    • 从故障中恢复的回填和其他应用程序需要比本地层中的数据更旧的数据,这些应用程序将从远程层提供服务。

优点


  • 允许独立于 Kafka 集群中的内存和 CPU 扩展存储,使 Kafka 成为长期存储解决方案。
  • 减少了本地存储在 Kafka 代理上的数据量,从而减少了在恢复和重新平衡期间需要复制的数据量。
  • 远程层中可用的日志段不需要在代理上恢复或延迟恢复,而是从远程层提供。
  • 增加保留期不再需要扩展 Kafka 集群存储和添加新节点
  • 整体数据保留期仍可能更长,无需单独的数据管道将数据从 Kafka 复制到外部存储。

支持


  通过将旧数据保留在外部存储(如 HDFS 或 S3)中,将 Kafka 的存储扩展到 Kafka 集群上可用的本地存储之外,同时将对 Kafka 内部的影响降至最低。

  对于未配置分层存储功能的现有用户,Kafka 行为和操作复杂性不得更改。

不支持


  分层存储不会取代 ETL 管道和作业。现有的 ETL 管道继续按原样使用 Kafka 中的数据,尽管 Kafka 中的数据具有更长的保留期。

  它不支持具有分层存储的紧凑主题。使用 remote.storage.enable 的有效值为 true 创建的主题无法将其保留策略从 delete 更改为 compact。

  它不支持分层存储的 JBOD 功能。

参考资料:

3.6发行说明

3.6发布公告