Kev*_*sko 3 producer-consumer apache-kafka kafka-consumer-api
例如,假设我有一个包含 4 个分区的主题。我向这个主题发送了 4k 条消息。每个分区获得 1k 条消息。由于外部因素,其中 3 个消费者分别处理了所有 1k 条消息。但是,第 4 个分区只能通过 200 条消息,还剩下 800 条消息需要处理。有没有一种机制可以让我“重新平衡”主题中的数据,说给分区 1-3 200 的分区 4s 数据,让所有带有 200 条消息的分区成为一个进程?
我不是在寻找一种向消费者组添加额外节点并让 kafka 平衡分区的方法。
添加了重新分配分区的输出:
当前分区副本分配
{
"version": 1,
"partitions": [
{
"topic": "MyTopic",
"partition": 0,
"replicas": [
0
],
"log_\ndirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 1,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 4,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 3,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"p\nartition": 2,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 5,
"replicas": [
0
],
"log_dirs": [
"any"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
建议的分区重新分配配置
{
"version": 1,
"partitions": [
{
"topic": "MyTopic",
"partition": 3,
"replicas": [
0
],
"log_ dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 0,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 5,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 2,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"p artition": 4,
"replicas": [
0
],
"log_dirs": [
"any"
]
},
{
"topic": "MyTopic",
"partition": 1,
"replicas": [
0
],
"log_dirs": [
"any"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
产生消息时分配分区。它们永远不会在分区之间自动移动。通常,对于每个分区,可以有多个消费者(具有不同的消费者组 ID)以不同的速度消费,因此代理无法根据消费者(组)的速度在分区之间移动消息。不过,您可以尝试以下几件事:
| 归档时间: |
|
| 查看次数: |
3129 次 |
| 最近记录: |