gpt4 book ai didi

streaming - 集群中的 Apache Flink 流不会与工作人员拆分作业

转载 作者:行者123 更新时间:2023-12-04 10:36:33 25 4
gpt4 key购买 nike

我的目标是使用 Kafka 作为源和 Flink 作为流处理引擎来设置一个高吞吐量集群。这是我所做的。
我在主节点和工作节点上设置了以下配置的 2 节点集群。
掌握 flink-conf.yaml

jobmanager.rpc.address: <MASTER_IP_ADDR> #localhost

jobmanager.rpc.port: 6123

jobmanager.heap.mb: 256

taskmanager.heap.mb: 512

taskmanager.numberOfTaskSlots: 50

parallelism.default: 100
worker flink-conf.yaml
jobmanager.rpc.address: <MASTER_IP_ADDR> #localhost

jobmanager.rpc.port: 6123

jobmanager.heap.mb: 512 #256

taskmanager.heap.mb: 1024 #512

taskmanager.numberOfTaskSlots: 50

parallelism.default: 100
slaves主节点上的文件如下所示:
<WORKER_IP_ADDR>
localhost
两个节点上的 flink 设置位于同名的文件夹中。我通过运行在主服务器上启动集群
bin/start-cluster-streaming.sh
这将启动 Worker 节点上的任务管理器。
我的输入源是 Kafka。这是片段。
final StreamExecutionEnvironment env = 
StreamExecutionEnvironment.getExecutionEnvironment();

DataStreamSource<String> stream =
env.addSource(
new KafkaSource<String>(kafkaUrl,kafkaTopic, new SimpleStringSchema()));
stream.addSink(stringSinkFunction);

env.execute("Kafka stream");
这是我的接收器功能
public class MySink implements SinkFunction<String> {

private static final long serialVersionUID = 1L;

public void invoke(String arg0) throws Exception {
processMessage(arg0);
System.out.println("Processed Message");
}
}
这是我的 pom.xml 中的 Flink 依赖项。
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-streaming-core</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-clients</artifactId>
<version>0.9.0</version>
</dependency>
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-connector-kafka</artifactId>
<version>0.9.0</version>
</dependency>
然后我在 master 上用这个命令运行打包的 jar
bin/flink run flink-test-jar-with-dependencies.jar
但是,当我将消息插入 Kafka 主题时,我能够单独在主节点上考虑来自我的 Kafka 主题的所有消息(通过我的 SinkFunction 实现的 invoke 方法中的调试消息)。
在作业管理器 UI 中,我可以看到 2 个任务管理器,如下所示:
Job Manager dashboard - task managers
此外仪表板看起来像这样:
enter image description here
问题:
  • 为什么工作节点没有得到任务?
  • 我错过了一些配置吗?
  • 最佳答案

    在 Flink 中读取 Kafka 源时,源任务的最大并行度受给定 Kafka 主题的分区数限制。 Kafka 分区是 Flink 中源任务可以使用的最小单位。如果分区比源任务多,那么有些任务会消耗多个分区。

    因此,为了为所有 100 个任务提供输入,您应该确保您的 Kafka 主题至少有 100 个分区。

    如果您无法更改主题的分区数,那么也可以使用 setParallelism 使用较低的并行度从 Kafka 进行初始读取。方法。或者,您可以使用 rebalance方法,它将在前面操作的所有可用任务中打乱您的数据。

    关于streaming - 集群中的 Apache Flink 流不会与工作人员拆分作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32271475/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com