假设答案是,是的,Kafka不会再平衡,那么有什么解决方案可以让Kafka在各种情况下平衡
让我们假设您的CPU增加是因为主题的吞吐量增加了,而不是因为主题的分区增加了。
在这种情况下,分区在同一使用者组的多个实例中均匀分布。通常,使用者线程*instance count<=partitions
。
如果您的可用线程总数超过分区,那么您的订阅过量。如果您有更少的,那么一些线程将使用来自多个分区的循环样式。
Kafka再平衡算法是否适用于不同主题? 假设我有5个主题,每个主题都有10个分区,同一消费者组中有20个消费者应用程序实例,每个实例都订阅了这5个主题。 Kafka会尝试在20个实例中平衡50个分区吗? 还是它只在一个主题内保持平衡,因此10个第一个实例可能(或可能)接收所有50个分区,而其他10个实例可能保持空闲? 我知道,在过去,Kafka并没有在不同的主题之间取得平衡,但现在的版本呢?
当我们的kafka主题中有多个分区时,分区重新平衡是一件常见的事情吗? 这并不一定意味着我们的应用程序存在延迟或问题? 我一直看到分区被撤销和重新分配的日志。
首先,很抱歉,如果我的术语不准确,我对Kafka很陌生,我已经尽可能多地读过了。我们有一个使用kafkastreams的服务,kafka版本:2.3.1。流应用程序具有一个流拓扑,该流拓扑从“topica”读取,执行转换并发布到另一个主题“topicb”,然后由拓扑的另一个流消费,并使用Ktable(localstore)聚合它。侦听器将ktable更改发布到另一个主题中。 主题有24个分区。我们
在系统设计中提出的一个问题是,如果消息键的选择方式在数据流中经常发生,这是否意味着只有一个主题分区将专门接收这些消息,即使这会在分区如何填充数据的方式上造成不平衡? Kafka是否有一种机制可以在多个分区之间“拆分”具有相同键的消息,从而在这种情况下牺牲顺序? 或者键中没有例外
谢谢你的耐心。 在线向主题添加分区后,kafka使用者将停止读取消息,并且不会抛出异常。消费者只是阻拦。每次我们必须重新启动消费者。我认为这是不合理的,我找不到任何关于它的文件。 而且,当处理消息发生错误时,使用者线程不会恢复。我们的消费者读取消息并将其插入MySQL。一旦网络出现故障,consumer无法连接到MySql,然后它阻塞并停止读取消息,直到我们重新启动它。 “要知道,分区的一个用例是
这是我的第一个负载平衡问题。 我已经编写了一个简单的express应用程序来了解负载平衡是如何工作的。我还看了一些类似于的东西。如果我必须使用Nginx进行负载平衡,那么我是否应该在4个不同的docker容器中运行4个不同的express实例,然后使用Nginx在它们之间进行负载平衡,而Nginx位于自己的容器中? 我说得对吗?我有点困惑