Apache Kafka 2.5.0 稳定版正式发布,快速了解kafka2.5.0版本的新特性

Apache 2.5.0 已于近期正式发布。

新特性

2.5.0版本添加了许多新特性,其中包括:

  • 支持 TLS 1.3(目前默认使用 1.2 版本)
  • 引入用于 Kafka Streams 的 Co-groups
  • 支持通过同步备用服务器(in-sync Standbys)提供交互式查询
  • 用于 Kafka Consumer 的增量 rebalance 机制(incremental rebalance )
  • 引入新的指标以便更好地了解业务情况
  • 升级 Zookeeper 至 3.5.7
  • 取消支持 Scala 2.11

改良

  • 当输入 topic 事务时,Kafka Streams lag 不为 0
  • Kafka-streams 可配置内部 topics message.timestamp.type=CreateTime
  • 将 KStream#toTable 添加到 Streams DSL
  • 将 Commit/List Offsets 选项添加到 AdminClient
  • 将 VoidSerde 添加到 Serdes
  • 改进 Sensor Retrieval

重要更新

Kafka broker, producer, 和 consumer 更新

KIP-500:在Apache Kafka 2.5中,已经在为删除Apache ZooKeeper™(ZK)做了一些准备工作,未来,可能使用kafka不再需要将Broker、topic以及分区相关的信息存储于Apache zookeeper这个独立的系统,对于我们使用者来说,负担无疑会大幅减少,kafka将不再需要依赖zk就可独立运行。

KIP-555:管理员工具中启用Zookeeper,使得动态配置不再需要请求ZK,也是为了在未来的版本中完成从kafka中删除Zookeeper提前做的一些准备工作。

仅且一次语义更新 Exactly once semantics (EOS)

KIP-447:Producer可伸缩性支持Exactly once semantics

这个KIP简化了以事务方式从Kafka读写的应用程序的API。以前,这个用例通常需要为每个输入分区提供单独的生产者实例,但是现在没有特殊的要求。这使得构建消耗大量分区的EOS应用程序变得更加容易。这是下一个版本中Kafka流中类似改进的基础。

KIP-360:提高幂等/事务性生产者的可靠性

此KIP解决了代理上的生产者状态保留问题,这使得幂等性保证成为可能。在此之前,当日志被截断以强制保留或从删除记录的调用中截断时,代理将删除生产者状态,这将导致UnknownProducerId错误。通过此改进,代理将保留producer状态,直到到期。这个KIP还为生产者提供了一种从意外错误中恢复的强大方法。

度量标准和操作改进

KIP-515:使ZK客户机能够使用新的TLS支持的身份验证(ZK 3.5.7)

Apache Kafka 2.5现在发布ZooKeeper 3.5.7。一个值得注意的特性是ZooKeeper 3.5中新增的ZooKeeper TLS支持。在部署安全的Kafka集群时,使用TLS对传输中的通信进行加密至关重要。Apache Kafka 2.4已经发布了ZooKeeper 3.5,它在代理和ZooKeeper之间添加了TLS支持。但是,在代理或CLI工具(例如,zookeepersecurity -migration)的Java调用上,配置信息必须通过系统属性作为-D命令行选项传递,这是不安全的。KIP-515引入了必要的更改,以便能够使用安全配置值来使用带有ZooKeeper的TLS。

ZooKeeper 3.5.7通过它的ssl支持两种相互的TLS认证。clientAuth=需要的配置值和TLS加密,不需要通过ssl.clientAuth=none进行客户端证书认证。

KIP-511:在代理中收集和公开客户的姓名和版本

以前,Apache Kafka的操作人员只能使用在消费者和生产者上设置的clientId字段来识别进入的客户端。由于此字段通常用于标识不同的应用程序,因此在客户端软件库和版本的操作方面存在一定的缺陷。KIP-511为ApiVersionsRequest RPC引入了两个新字段:ClientSoftwareName和ClientSoftwareVersion。

这些字段由代理捕获,并通过一组新的指标报告。度量MBean模式是:

kafka.server:clientSoftwareName=(client-software-name),clientSoftwareVersion=(client-software-version),listener=(listener),networkProcessor=(processor-index),type=(type)

例如,Apache Kafka 2.4 Java客户端在代理上生成以下MBean:

kafka.server:clientSoftwareName=apache-kafka-java,clientSoftwareVersion=2.4.0,listener=PLAINTEXT,networkProcessor=1,type=socket-server-metrics

KIP-559:使Kafka协议对L7代理更友好

这个KIP改进了我们协议的几个部分,这些部分不是完全自己定义的。我们的一些api具有隐式编码的通用字节字段。需要额外的上下文来正确解码这些字段。这个KIP通过向API添加必要的上下文来解决这个问题,这样L7代理就可以完全解码我们的协议。

KIP-541:创建一个fetch.max。代理的字节配置

Kafka使用者可以通过设置客户端配置fetch.max.bytes来选择要获取的最大字节数。值过高可能会降低其他使用者在代理上的性能。如果该值非常高,则客户端请求可能超时。KIP-541通过代理设置集中此配置,代理设置为客户机可以选择获取的最大字节数设置上限。

Kafka Streams

KIP-150:将Cogroup添加到DSL中

在过去,将多个流聚合成一个流可能很复杂,而且容易出错。它通常要求您将所有流分组并聚合到表中,然后进行多个外部连接调用。新的co-group操作符清理了程序的语法,减少了状态存储调用的数量,并总体上提高了性能。

KTable<K, CG> cogrouped =
  grouped1
    .cogroup(aggregator1)
    .cogroup(grouped2, aggregator2)
    .cogroup(grouped3, aggregator3)
    .aggregate(initializer1, materialized1);

KIP-523:将toTable()添加到DSL中

toTable()函数可以应用到流中,并实现每个键的最新值。需要注意的是,任何空值都将被解释为对给定键值(tombstones)的删除。

关于Scala支持的更新

在Apache Kafka 2.5中放弃了对Scala 2.11的支持。Scala 2.12和2.13现在是唯一支持的版本。

TLS 1.2现在是默认的SSL协议。仍然支持TLS 1.0和1.1。

文章说明

kafka-2.5.0版本下载地址:https://kafka.apache.org/downloads#2.5.0

参考文章:https://www.confluent.io/blog/apache-kafka-2-5-latest-version-updates/

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注