Apache Kafka 2.6.0 于2020年08月03日正式发布。在这个版本中,社区做了很多显著的性能改进,特别是当 Broker 有非常多的分区时。Broker 关闭性能得到了显著提高;当生产者使用压缩时,性能也得到了显著提高。ACL 使用的各个方面都有不同程度的提升,并且需要更少的内存。
这个版本还增加了对 Java 14 的支持。在过去的几个版本中,社区默认使用 Scala 2.13,现在社区开始推荐在生产环境中使用 Scala 2.13。
最后,这版本的成就只是 Apache Kafka 3.0 运行路线图的一部分,Apache Kafka 3.0 可能是该项目历史上最重要的版本之一。用内置基于 Raft 的共识取 ZooKeeper 的工作正在进行中,目前有8个 KIPs 正在积极开发中。用于元数据仲裁(metadata quorum)的 Kafka 新 Raft 协议已经处于 review 状态。
如果需要下载 Apache Kafka 2.6.0,可以到 这里下载。由于时间和篇幅的关系,下面我们只介绍 Kafka 2.6 版本部分变化,更多内容请参见 Kafka 2.6.0 Release Notes。
Kafka broker, producer, 和 consumer 的更新
KIP-546: Add Client Quota APIs to the Admin Client
在 Kafka 中管理配额(quotas)是一项具有挑战的事情,因为它们可以映射到用户和客户端的任何组合。KIP-546 这个特性添加了一个用于管理配额的内置 API,从而使过程更加直观且不易出错。新的 kafka-client-quotas.sh
命令行工具允许用户描述现有的配额,使用有关如何导出配额的上下文信息来解析实体的有效配额,并且可以通过这个命令行工具对 Quota 进行添加,更新, 删除等操作。 例如:
$ /bin/kafka-client-quotas.sh --bootstrap-server localhost:9092 \ --alter --names=client-id=my-client \ --defaults=user \ --add=consumer_byte_rate=2000000 \ --delete=producer_byte_rate
KIP-551: Expose disk read and write metrics
Kafka broker 所在机器上的磁盘访问可能会影响延迟和吞吐量。KIP-551 这个特性增加了 Kafka 从磁盘读取和写入的字节数指标。
KIP-568: Explicit rebalance triggering on the Consumer
在 Kafka 2.6.0 版本之前,Rebalance 的触发都是由消费者 Coordinator 来执行的,Kafka consumer Coordinator 协调哪个主题分区分配给消费者组( consumer group)的哪个消费者。 KIP-568 这个功能允许应用程序使用消费者 API (enforceRebalance)显式触发重新平衡,例如,应用程序使用某些系统条件来确定它是否准备好接收分区。
KIP-573: Enable TLSv1.3 by default
在使用 Java 11 或更高版本时,TLS 1.3 现在是默认的 TLS 协议,而 TLS 1.2 仍然是早期 Java 版本的默认协议。与 Apache Kafka 2.5.0 一样,由于已知的安全漏洞,TLS 1.0 和 1.1 在默认情况下是禁用的,但是如果需要,用户仍然可以启用它们。
KIP-574: CLI Dynamic Configuration with file input
Kafka 配置的大部分是由一个单值映射到一个配置名称。在 KIP-574 之前,很难设置由更复杂的结构(如嵌套的 list 或JSON)定义的配置。Kafka 2.6 现在支持使用 kafka-configs.sh 命令行工具来设置文件中已经定义的配置。 例如:
$ bin/kafka-configs.sh --bootstrap-server localhost:9092 \ --entity-type brokers --entity-default \ --alter --add-config-file new.properties
KIP-602: 修改 client.dns.lookup 的默认值
Apache Kafka 2.1.0 和 KIP-302 为 client.dns.lookup
客户端属性引入了 use_all_dns_ips
选项。 Kafka 2.6.0 开始,use_all_dns_ips
选项是默认选项了,因此它将尝试使用主机名的所有可能 IP 地址连接到 broker。新的默认值将降低连接失败率,并且在单个主机名可以解析为多个IP地址的云和容器化环境中更为重要。
Kafka Connect
KIP-158: Kafka Connect should allow source connectors to set topic-specific settings for new topics
这个特性是很多用户需要的,有了这个功能 Kafka Connect 可以在自动为写入记录的源连接器创建 Kafka 主题(如果这些主题不存在)。 默认情况下这个功能是启用的,但是需要我们设置一些连接器配置(connector configurations)以便可以成功创建主题。 例如,如果我们设置以下的配置将使 Connect 创建的缺失主题具有5个分区且复制因子为3:
topic.creation.default.replication.factor=3 topic.creation.default.partitions=5
当然,Kafka 还支持很多其他的配置选型,具体请参见 Kafka 的官方文档。
KIP-605: Expand Connect Worker Internal Topic Settings
说到创建主题,我们现在可以对内部的主题(internal topics)进行一些配置,比如使用 Kafka Broker 的默认分区数和副本因子,这些内部主题通常用于存储 connector 的配置、偏移量以及状态等。
KIP-610: Error Reporting in Sink Connectors
如果某些记录不能被序列化或反序列化,或者当单个消息转换(SMT)失败时,Kafka Connect 已经具备了将这些记录写入死信队列(DLQ)主题的能力。现在,如果连接器认为记录无效或有问题,Connect 可以使接收连接器(sink connectors)将单个记录发送到 DLQ。接收连接器需要显式地使用此特性,这样做将允许接收连接器在消费到与其不兼容的记录时,仍然可以继续正常运行。
KIP-585: Filter and Conditional SMTs
为使用多个主题的连接器定义 SMT 可能具有挑战性,因为并非每个 SMT 都可以适用于每个主题的每条记录。有了 KIP-585 这个特性,每个 SMT 都可以定义一个谓词以及应用该 SMT 时的条件。它还定义了一个“过滤器”SMT,它与谓词一起工作,以删除匹配特定条件的记录。
Kafka Streams
- Kafka Streams 应用现在支持平滑扩展,具体参见 KIP-441。
- Kafka Streams support for emit on change,参见 :KIP-557
- 仅且一次语义的 Producer 扩展,参见:KIP-447
- Kafka Streams 对监控指标进行了增强,比如加了一些内置的指标并且删除了一些无用的,参见:KIP-444
本文翻译自:What’s New in Apache Kafka 2.6
本博客文章除特别声明,全部都是原创!原创文章版权归过往记忆大数据(过往记忆)所有,未经许可不得转载。
本文链接: 【Apache Kafka 2.6.0 有哪些值得关心的变化】(https://www.iteblog.com/archives/9851.html)