我正在阅读Kafka:The Definitive Guide,并希望更好地理解重新平衡监听器.本书中的示例简单地使用a HashMap
来维护已处理的当前偏移量,并在撤销分区时提交当前状态.我担心的是:
我在代码示例中有两个问题/问题:
我有一个巨大的InnoDB表(> 1TB,> 1B行),我想要分片:我想从那个大表中创建多个较小的独立表.
怎么做 ?
我已经尝试过的:
随机疯狂的想法:
.idb
文件脱机并将其导入服务器,但我不知道是否存在能够执行此操作的工具.显示创建表:
CREATE TABLE `Huge` (
`account_id` int(11) NOT NULL,
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`foo` varchar(255) NOT NULL,
`bar` int(11) NOT NULL,
`baz` char(2) NOT NULL,
PRIMARY KEY (`account_id`,`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED;
Run Code Online (Sandbox Code Playgroud)
分片键是account_id.当前的主键是(account_id,id)
使行聚集account_id
.
是否有任何工具可以自动执行此任务?有没有更好的方法呢?
我已将 Kafka 提交策略设置为最新且缺少前几条消息。如果我在开始将消息发送到输入主题之前休眠 20 秒,则一切都按预期工作。我不确定问题是否与消费者花费很长时间进行分区重新平衡有关。有没有办法在开始轮询之前知道消费者是否准备好?
我使用的是卡夫卡:2.11-1.0.1。该应用程序包含主题“X”的并发度为 5 且分区为 5 的使用者。
当应用程序重新启动并且在分区分配之前在主题“X”上发布消息时,主题“X”的 5 个消费者找到组协调器并向组协调器发送加入组请求。预计会得到团体协调员的答复,但没有收到任何答复。
我已检查 Kafka 服务器日志,但找不到 DEBUG 日志级别的相关日志。
当我运行描述消费者组命令时,出现以下观察结果:
新消息发布在主题“X”上,但消费者没有收到。
heartbeat 和 session.time.out 设置为默认值。
如果消息在主题“X”及其使用者的分区分配之前发布,则会出现此问题。
我的疑问是:为什么重新平衡没有完成以便新的消费者开始消费新生成的消息?
我正在使用kafka连接器融合3.0.1版本。我创建了一个名为new-group的新组,其上大约有20个主题。这些主题大多数都很忙。但是很可惜的是,当我启动连接器框架时,系统无法停止重新平衡,所有主题大约需要2分钟重新平衡。我不知道原因 一些错误信息是:
[2017-01-03 21:43:57,718] ERROR Commit of WorkerSinkTask{id=new-connector-0} offsets threw an unexpected exception: (org.apache.kafka.connect.runtime.WorkerSinkTask:180)
org.apache.kafka.clients.consumer.CommitFailedException: Commit cannot be completed since the group has already rebalanced and assigned the partitions to another member. This means that the time between subsequent calls to poll() was longer than the configured session.timeout.ms, which typically implies that the poll loop is spending too much time message processing. You can address this either by increasing the session timeout or by reducing the maximum size …
Run Code Online (Sandbox Code Playgroud) 我有一个 kubernetes 集群,其中设置了几个节点。我想确保 Pod 有效地分布在节点上。
我会解释:
假设我有两个节点:
Node 1 - 2gb ram
Node 2 - 2gb ram
我有这些豆荚:
Pod 1 - 1gb ram on Node 1
Pod 2 - 100mb ram on Node 1
Pod 3 - 1gb ram on Node 2
Pod 4 - 100mb ram on Node 2
现在问题来了:假设我想向集群添加一个带有 1gb ram 的 pod。目前任何节点都没有空间,所以 kubernetes 不会这样做(除非我添加另一个节点)。我想知道 kubernetes 是否会看到它可以将 Pod 3 移动到节点 1 以便为新 Pod 腾出空间?
帮助
在研究Service Fabric上的资源平衡器和动态负载指标时,我们遇到了一些问题(运行devbox SDK GA 2.0.135).
在Service Fabric Explorer(门户网站和独立应用程序)中,我们可以看到平衡是经常运行的,大部分时间它几乎立即完成,这种情况每秒都会发生.在查看节点或分区上的负载度量信息时,它不会在报告负载时更新值.
我们根据交互(对服务的HTTP请求)发送动态负载报告,大量增加单个分区的报告负载数据.这个尖峰在5分钟内变得可见,此时平衡器实际上开始平衡.这似乎是加载数据刷新的间隔.在上次报告的时间得到更新所有的时间,但没有新的价值.
我们将指标添加到applicationmanifest和clustermanifest以确保它在平衡中使用.这意味着资源平衡器使用相同的数据5分钟.这是可配置的设置吗?是约束因为它是在devbox上运行的吗?我们在clustermanifest中尝试了很多变量,但似乎都没有影响这个刷新时间.
如果这不适应,有人可以解释为什么你会使用陈旧数据运行平衡器?为什么选择这5分钟的间隔?
rebalancing ×7
apache-kafka ×4
innodb ×1
kubernetes ×1
metrics ×1
mysql ×1
scheduling ×1
sharding ×1
spring-kafka ×1