暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Apache Kafka 2.8的新增功能

Kafka Confluent 兴趣爱好者 2021-04-20
408

我很自豪地代表Apache Kafka®社区宣布Apache Kafka 2.8.0 的公布2.8.0版本包含许多新功能和改进。这篇博客文章重点介绍了一些更为突出的功能。请确保查看发行说明以获取完整的更改列表


此版本提供了KIP-500的早期访问版本,该版本使您可以在没有Apache ZooKeeper的情况下运行Kafka Broker,而取决于内部的Raft实现。这项备受期待的体系结构改进使每个群集支持更多分区,更简单的操作和更严格的安全性。

Kafka Broker,生产者和消费者

KIP-500:用自我管理的quorum替换ZooKeeper

我们很高兴地宣布2.8引入了不带ZooKeeper的Kafka的抢先体验!该实现尚未完成功能,不应在生产中使用,但是可以在没有ZooKeeper的情况下启动新集群,并进行基本生产和使用用例。

在较高的层次上,KIP-500的工作原理是将主题元数据和配置从ZooKeeper中移出,并移动到名为的新内部主题中@metadata
该主题由内部“控制器”的Raft法定人数管理,并复制到集群中的所有Broker。Raft quorum的领导者与当今集群中的控制器担当着相同的角色。根据新的process.roles
配置,KIP-500世界中的一个节点可以充当控制器,Broker或同时充当这两者有关快速入门说明和其他详细信息,请参见自述文件

在过去的一年中,此版本是社区做出的巨大努力,并将在今年持续进行。我们预计到年中和年末发布时,在功能完整性和强化方面将有重大改进。快速浏览一下已
合并的最重要的KIP 

  • KIP-500:提出了一种事件驱动模型的愿景,该模型用于通过Raft协议管理的复制日志来管理元数据

  • KIP-595:指定用于@metadata
    主题的Raft协议

  • KIP-631:指定事件驱动的控制器模型,包括新的Broker生命周期和元数据记录架构

  • KIP-590:指定新协议以允许将客户端请求从Broker转发到控制器

KIP-700:添加描述群集API

Kafka AdminClient过去一直使用Broker的Metadata API来获取有关集群的信息。但是,Metadata API主要侧重于支持消费者和生产者客户端,它们遵循的方式与AdminClient不同。KIP-700通过添加新的API来直接查询Broker以获取有关集群的信息,从而使AdminClient与Metadata API脱钩。此更改使将来可以添加新的管理功能,而不会中断生产者和消费者。

KIP-684:在SASL_SSL侦听器上支持双向TLS身份验证

Kafka Broker支持TLS客户端身份验证(也称为双向TLS身份验证),以保护客户端Broker系统。从历史上看,尽管KIP-103引入了在Broker上独立配置不同网络侦听器的能力,但您只能在Broker范围内配置此身份验证机制KIP-684允许您在SASL_SSL侦听器上启用双向TLS,从而提高其保护环境的能力。

KIP-676:尊重日志记录层次结构

Log4j使用分层模型在应用程序内配置记录器。每个记录器的名称均由句点(。)分隔,在记录器层次结构中将其视为级别。可以同时配置各个记录器和中间层次结构级别(例如,以启用调试日志记录)。如果未明确配置单个记录器,则它将继承其最接近祖先的配置,一直继承到根记录器,而根记录器是系统中所有记录器的共同祖先。从历史上看,Kafka Broker用于查看日志级别的API不遵循此层次结构,而是仅报告任何未配置的单个记录器的根记录器配置。KIP-676通过改用与日志记录框架相同的方式解析记录器配置来纠正此行为。

KIP-673:使用新的自动生成的模式发射JSON

Kafka Broker提供调试级别的请求/响应日志。以前,它们是由请求/响应类的toString
替代生成的半结构日志KIP-673将这些日志调整为JSON结构,以便日志记录工具链可以更轻松地对其进行解析和使用。

KIP-612:限制Broker连接创建速率

创建新的连接会增加Broker的开销。KIP-306缓解了由于未经授权的连接而引起的连接风暴问题。但是,连接风暴也可能来自授权的客户端。为了使您更轻松地确保Broker的稳定性,KIP-612增加了对Broker接受整体和每个IP地址的新连接的速率设置限制的功能。

KIP-516:主题标识符

以前,Kafka中的主题仅通过名称来标识。KIP-516引入了主题ID以唯一地标识主题。主题ID在其整个生命周期中都是唯一的,甚至不能删除相应的主题。与主题名称相比,它们在网络和内存中也是更有效的表示。

从2.8.0开始,将为现有和新主题提供主题ID。客户端现在可以通过元数据响应接收主题ID。此KIP的工作仍在进行中,将来的发行版将包括对更有效删除的支持,以及将主题ID添加到其他请求中。

Kafka Connect

KIP-661:在Connect REST API中公开任务配置

Kafka Connect公开了REST API,允许调用者查看正在运行的连接器的配置。这对于管理员非常有用,因为它使他们能够确定连接器的工作量。在Connect中,连接器会在实际开始执行之前处理配置,在某些情况下,连接器会将其配置化并将其映射到将执行向Kafka传输数据或从Kafka传输数据的实际工作的每个单独任务。管理员历来能够查看名义配置,但不能查看正在运行的任务使用的实际解析的配置。KIP-661添加了新的API端点和方法,以允许调用者检索连接器任务的实际运行时配置。这可以用于调试,也可以用于了解故障的影响(例如,任务崩溃)。

Kafka流

KIP-696:更新流FSM以阐明ERROR
状态含义

Kafka Streams公开了一个状态机,以帮助您以日志和指标的形式推断其应用程序的状态,并在状态转换时触发用户定义的行为该状态机包含一个ERROR
状态,状态在历史上意味着所有线程都已死亡。KIP-663之前,还没有办法替换死线程,因此ERROR
终端状态也是如此。但是,随着最近的弹性改进(以下是KIP-663和KIP-671)的增加,没有正在运行的线程不再清楚地指示错误,也不会终止。无论如何,应用程序仍然会遇到致命错误,并且您仍然需要知道何时发生这种情况。KIP-696更新状态机以授予ERROR
 一个更具体的含义,即它是一个终端状态,指示应用程序遇到了致命错误。

KIP-689:扩展StreamJoined
以允许更多存储配置

Kafka Streams提供了StreamJoined
config对象,可以为联接操作设置各种配置选项。KIP-689增加了控制更改日志主题设置的能力,这些设置使连接状态持久。默认配置仍然适用于大多数应用程序,但是高级操作员需要能够调整支持流处理的内部主题的配置。

KIP-680:TopologyTestDriver
不需要属性参数

Kafka Streams提供了TopologyTestDriver
运行时,该运行时支持在快速,单线程,确定性环境中测试整个Streams应用程序,而无需运行任何额外的组件(例如Broker或ZooKeeper)。的构造函数TopologyTestDriver
旨在反映KafkaStreams
(主运行时)的构造函数:它以应用程序本身(拓扑结构)作为一个参数,而将配置作为第二个参数。

从历史上讲,TopologyTestDriver
强制执行与相同的必需配置KafkaStreams
,包括Broker连接字符串和应用程序ID,即使这些配置对而言毫无意义TopologyTestDriver
从2.8.0版开始,不再需要这些样板配置,并且KIP-680通过添加根本不需要配置参数的新构造函数重载来简化常见情况。主构造函数仍然可用,因此您当前的测试将继续起作用,如果需要指定其他配置选项,则仍可以使用主构造函数。

KIP-671:介绍Kafka Streams特定的未捕获异常处理程序

Kafka Streams封装了复杂的逻辑,包括用户和系统定义的代码,I O操作,多线程等,所有这些都为遇到意外异常提供了许多机会。以前,Kafka Streams采用安全简单的方法将异常抛出到顶层,这最终会杀死相关的执行线程。为了获得可见性,Streams公开了本机Java线程注册的能力UncaughtExceptionHandler
实际上,当线程死亡时,许多用例不仅需要可见性。

KIP-671添加了一个新的处理程序(StreamsUncaughtExceptionHandler
),该处理程序提供相同级别的可见性,同时还提供了一种机制来替换死线程(如果需要更高的弹性)或关闭系统(当前实例中的所有线程或所有实例中的线程)在集群中),以防您希望快速失败。处理程序允许根据实际异常选择不同的动作。

KIP-663:用于启动和关闭的API StreamThreads

Kafka Streams应用程序被构造为实例集群,每个实例都有一定数量的执行线程。线程数是在启动时配置的。在高负载下,您可能希望尝试增加或减少实例上的线程数,以便更好地利用系统资源或减少瓶颈。以前,这涉及停止,重新配置和重新启动每个实例。KIP-663KafkaStreams
接口添加了新方法,使您可以单独添加和删除处理线程,而不会破坏在同一实例上运行的其他线程。

KIP-659:改进TimeWindowedDeserializer
TimeWindowedSerde
处理窗口大小

Kafka Streams提供的操作之一是能够对输入记录流进行窗口化以进行聚合。例如,当计算每小时每个键的更新次数时,窗口大小为一小时。窗口大小被定义为Streams DSL中流处理逻辑的一部分,并且Kafka Streams自动配置存储和从本地存储和Kafka主题检索这些窗口所需的序列化器和解串器。因为窗口大小本身是固定的,并且对于特定操作是已知的,所以序列化器和反序列化器包含空间优化,仅存储窗口的开始时间戳(因为可以通过将窗口大小与开始时间相加来计算结束时间)。

有时,例如在调试应用程序或验证中间处理阶段时,您需要直接加载序列化的记录。为了支持这些用例,KIP-659为调用者提供了一种直接TimeWindowedDeserailizer
用窗口大小配置解串器()的方法,这与Streams为相同数据配置自己的内部解串器的方式几乎相同。

KIP-572:改善Kafka流中的超时和重试

KIP-572在Apache Kafka 2.7.0中部分实现,并在2.8.0中完成。该KIP增加了新的重试行为,以填补运行Kafka Streams应用程序时的重要弹性缺口。Streams的许多功能都依赖于远程调用,例如,对Kafka经纪人的调用。与任何网络呼叫一样,这些操作会受到任意错误和延迟的影响。

Streams依赖的Kafka客户端库具有自己的弹性设置,这可以帮助消除较小的网络中断,但是将客户端设置得过于弹性,意味着任何客户端API调用都可能长时间阻塞,从而影响整体稳定性的应用程序。另一方面,将这些客户端超时设置得太短会导致较小的网络中断期间应用程序崩溃。KIP-572添加了更高级别的重试循环。现在,当Streams在处理任务时遇到超时异常时,它将尝试在其他任务上取得进展,然后重试失败的任务。

结论

除了此处列出的KIP之外,Apache Kafka 2.8.0还具有许多出色的修复和改进。

接下来的步骤:

  • 有关更改的完整列表,请参见发行说明

  • 观看视频以了解更多信息

  • 下载Apache Kafka 2.8,以开始使用最新版本

这是社区付出的巨大努力,因此,感谢所有对此版本做出贡献的人,包括我们的所有用户以及我们的151位作者和审阅者:

17hao,abc863377,Adem Efe Gencer,akumar,Alexander Iskuskov,Alexandre Dupriez,Almog Gavra,Alok Nikhil,Anastasia Vela,Andrew Choi,Andrey Bozhko,Andrey Falko,Andy Coates,Andy Wilkinson,Ankit Kumar,Anna Povzner,Anna Sophie Blee-高盛,APaMio,阿伦·萨蒂什,阿伦·帕蒂班·ST,阿提拉·萨斯瓦里,贝努伊特·马吉,伯特伯,比尔·贝杰克,鲍勃·巴雷特,陈博扬,布拉吉什·库马尔,布莱恩·伯恩,布鲁诺·卡多纳,成坦,蔡家平,克里斯·埃格顿,CHUN-郝棠,科林·帕特里克·麦凯布,赛勒斯·瓦法达里,大卫·亚瑟,大卫·雅科特,大卫·毛,登子明,德鲁维尔·沙阿,迪马·雷兹尼克,东俊炫,王东旭,爱德华多·科玛,埃姆雷·哈塞格利,埃文·切斯拉克·波斯塔瓦,feyman2016,fml2,加德纳·维克斯(Gardner Vickers) ,乔迪(Geordie),戈文达·萨哈雷(Govinda Sakhare),格雷格·哈里斯(Greg Harris),王国章,格温·夏皮拉(Gham Shapira),哈姆萨·斯拉玛(Hamza Slama),high.lee,湖西,伊戈尔·苏亚雷斯(Igor Yane),伊斯梅尔·朱马(Ismael Juma),以色列埃克波(Ekpo),伊万·波诺马列夫(Ivan Ponomarev),伊万·尤琴科(Ivan Yurchenko),杰克·奥赫(Jackyoh),雅各布·霍曼(Jakob Homan),詹姆士·郑(James Yuzawa),杰森·古斯塔夫森(Jason Gustafson),杰西·戈津斯基(Jesse Gorzinski),吉姆·加拉辛,约翰·罗斯勒(John Roesler),豪尔赫·埃斯特万(Jorge Esteban)Quilcate Otoya,何塞·阿曼多·加西亚·桑西罗(JoséArmandoGarcíaSancio),何塞·桑西奥(Joseien Chanaud),朱利安Jun Rao,Justine Olshan,Kengo Seki,Konstantine Karantasis,Kowshik Prakasam,利亚,利亚·托马斯,李东进,Levani Kokhreidze,列夫Zemlyanov,Liju John,limngmonty,Lincong Li,Lucas Bradstreet,Luke Chen,Manikumar Reddy,Marco Aurelio Lotz, Mathieu,Matthew Wong,Matthias J.Sax,Matthias Merdes,Michael Bingham,Michael G.Noll,Mickael Maison,Montyleo,mowczare,Nigel Liang,Nikhil Bhatia,Nikolay Izhikov,Ning Zhang,Nitesh Mor,notifygd,Okada Haruki,Oliver Dineen ,panguncle,parafiend,Patrick Dignan,Prateek Agarwal,Prithvi,Rajini Sivaram,Raman Verma,Ramesh Krishnan M,Rameshkrishnan Muthusamy,Randall Hauch,Richard Fussenegger,Rohan Desai,Rohit Deshpande,Ron Dagostino,Ryanne Dolan,Samuel Cantero,Sanjana Kaundinya,Sanket Fajage,Satish Duggana,Scott Hendricks,Scott Sugar,邵阳红,Kozgarl Stani,Shonwenbing,s Stanislav Vodetskyi,Taisiia Goltseva,tang7526,Thorsten Hake,Tom Bentley,vamossagar12,Victoria Xia,Viktor Somogyi-Vass,voffcheg109,Walker Carlson,wenbingshen,William Hammond,wycccccc,xakassi,XavierLéauté10,Yonglong Chang和Yilong。Tom Bentley,vamossagar12,Victoria Xia,Viktor Somogyi-Vass,voffcheg109,Walker Carlson,wenbingshen,William Hammond,wycccccc,xakassi,XavierLéauté,Yilong Chang和zhangyue19921010。Tom Bentley,vamossagar12,Victoria Xia,Viktor Somogyi-Vass,voffcheg109,Walker Carlson,wenbingshen,William Hammond,wycccccc,xakassi,XavierLéauté,Yilong Chang和zhangyue19921010。


文章转载自Kafka Confluent 兴趣爱好者,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论