我正在使用 kafka 2.8.1(撰写本文时最新的 2.x)。
我有一个ingress包含 64 个分区、3x 复制和 8 个代理的主题。我按照扩展集群文档将集群扩展到 12 个代理。我不喜欢使用该--generate选项,kafka-reassign-partitions.sh因为它不会尝试最小化数据移动。因此,我创建了一个手动新分配,将副本移动到 4 个新代理,调整首选领导者并确保每个代理有 16 个副本。我将重新分配 json 分成 16 个部分,这样我就可以控制移动副本,而不是一次性移动整个世界。此过程是最佳实践(请参阅此处和此处的文档)。
然而,我在第一次重新分配时犯了一个错误,我用--cancel选项取消了它kafka-reassign-partitions.sh。相同的脚本为--execute您提供了一个 json 分配来撤消回滚的重新分配(请参阅最后的示例)。我也没有使用它来回滚已取消的重新分配。我更正了 json 文件,并根据需要继续重新分配所有 196 个副本。这里的文档暗示这应该已经纠正它。
如果不停止此类进程,则取消所有挂起的重新分配的效果将通过创建新的重新分配而被抵消。
取消的重新分配错误地将分区 3 副本移至代理 8,甚至在完成分区 3 的完全重新分配后,部分“孤立”副本仍保留在代理 8 上。请参阅此处的目录大小:
> kubectl exec kafka-8 -c kafka -- du -h /var/lib/kafka/data/topics
616G /var/lib/kafka/data/topics/ingress-28
615G /var/lib/kafka/data/topics/ingress-40
618G /var/lib/kafka/data/topics/ingress-8
615G /var/lib/kafka/data/topics/ingress-48
613G /var/lib/kafka/data/topics/ingress-0 …Run Code Online (Sandbox Code Playgroud) 我有以下课程,其中我需要使用 Guice 进行方法注入。
@Singleton
public class A {
private final Injector injector;
@Inject
public A(Injector injector) {
this.injector = injector;
}
public void method1() {
...
final XInterface x = this.injector.getInstance(Key.get(XInterface.class, Names.named("provideX")));
...
}
}
Run Code Online (Sandbox Code Playgroud)
该模块包含以下提供的方法:
public class MyModule extends AbstractModule {
@Override void configure() {
// no binding and scope for class A
}
@Provides
@Named("provideX")
public XInterface provide(@Named("isTest") boolean isTest, X x, XMock xMock) {
return isTest ? xMock : x;
}
}
Run Code Online (Sandbox Code Playgroud)
同一模块中isTest有一个提供者,在本次讨论中可以忽略。
现在,A 类中的注入给出了以下错误: …