当前位置: 首页 > 知识库问答 >
问题:

Kafka Connect分布式tasks.max配置设置的理想值?

弓华茂
2023-03-14

我希望产品化并部署我的Kafka Connect应用程序。然而,我对任务有两个问题。最大值设置,这是必需的,非常重要,但具体设置该值的具体内容很模糊。

如果我有一个包含n个分区的主题,我希望从中使用数据并将其写入某个接收器(在我的情况下,我正在写入S3),那么我应该设置什么任务。最大值到?我应该把它设置为n吗?我应该把它设置为2n吗?直觉上,我似乎想将值设置为n,这就是我一直在做的。

如果我更改我的 Kafka 主题并增加该主题的分区怎么办?我将不得不暂停我的 Kafka 连接器并增加任务.max如果我将其设置为 n?如果我将值设置为 2n,那么我的连接器应该自动增加它运行的并行度吗?

共有2个答案

齐元章
2023-03-14

我们在Kafka-Connect(5.1.2)实例之间的工作负载分配上遇到了问题,这是由于< code>tasks.max的数量大于分区的数量。

在我们的例子中,有10个Kafka Connect任务和3个要消费的主题分区。这10个工人中的3个被分配到主题的3个分区,另外7个没有被分配到任何分区(这是预期的),但是Kafka Connect平均地分配了任务,没有考虑他们的工作量。因此,我们最终将任务分配给我们的实例,其中一些实例处于空闲状态(因为它们没有被分配给任何非空的工作者),或者一些实例比其他实例工作得更多。

为了解决这个问题,我们将tasks.max设置为等于主题的分区数。

我们真的很意外地看到Kafka Connect在重新平衡时不考虑任务的分配。另外,我找不到任何关于< code>tasks.max设置的文档。

颜瀚漠
2023-03-14

在 Kafka Connect 接收器中,任务实质上是使用者线程和接收要从中读取的分区。如果您有 10 个分区并且有任务.max设置为 5,则每个任务接收 2 个分区以读取和跟踪偏移量。如果已配置任务.max则 Connect 将启动与它正在阅读的主题的分区相等的任务数。

如果更改主题的分区计数,则必须重新启动连接任务,如果任务.max仍大于分区计数,则 Connect 将启动许多任务。

编辑,刚刚发现连接器上下文:https://kafka.apache.org/0100/javadoc/org/apache/kafka/connect/connector/ConnectorContext.html

必须编写连接器以包含此内容,但看起来 Connect 能够在主题更改(添加/删除分区)时重新配置连接器。

 类似资料:
  • 完成以下步骤:主机>编辑jmeter文件,并将远程主机ip=10.21.4.199和从机启动JMeter-Server,所有机器都是相同的子网,使用相同的java和jmeter版本。问题是:1>不运行从机。可以提供一步一步的步骤,Plz不添加jmeter分发pdf的通用pdf。2>脚本在没有远程主机的情况下运行,请为空。3>必须在主机上运行脚本? 你能解释其他一点吗?意思是:

  • 在分布式系统中,常困扰我们的还有上线问题。虽然目前有一些优雅重启方案,但实际应用中可能受限于我们系统内部的运行情况而没有办法做到真正的“优雅”。比如我们为了对去下游的流量进行限制,在内存中堆积一些数据,并对堆积设定时间或总量的阈值。在任意阈值达到之后将数据统一发送给下游,以避免频繁的请求超出下游的承载能力而将下游打垮。这种情况下重启要做到优雅就比较难了。 所以我们的目标还是尽量避免采用或者绕过上线

  • Zookeeper提供了一个分层命名空间,允许客户端存储任意数据,如配置数据。Spring Cloud Zookeeper Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config命名空间中。根据应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件,创建多个Prop

  • Consul提供了一个用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。基于应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件创建多个PropertySource实例。例

  • 我想在不同的 VM 上配置 Ehcache 实例,并在主机上运行 servlet,将这些缓存用作数据存储。缓存服务器必须形成一个集群,用于分布式缓存。 我搜索了任何地方(谷歌、stackoverflow、Ehachep留档)。但是,我找不到任何足够的“如何”文章。此外,我不可能使用企业产品(Terracotta BigMemory等)。 可以随意假设元素包含如上所述的客户信息。我只需要知道如何通过

  • 在这最后一章中,我们将回到:kv应用程序,给它添加一个路由层,使之可以根据桶的名字,在各个节点间分发请求。 路由层会接收一个如下形式的路由表: [{?a..?m, :"foo@computer-name"}, {?n..?z, :"bar@computer-name"}] 路由者(负责转发请求的角色,可能是个节点)将根据桶名字的第一个字节查这个路由表, 然后根据路由表所示将用户对桶的请求发给相应