1

我正在使用 Flink 从 Apache Pulsar 读取数据。我在 pulsar 中有一个分区主题,有 8 个分区。我在这个主题中生成了 1000 条消息,分布在 8 个分区中。我的笔记本电脑有 8 个内核,所以我有 8 个子任务(默认并行度 = 内核数)。我从 Eclipse 执行代码后打开 Flink-UI,发现一些子任务没有收到任何记录(空闲)。我期望所有 8 个子任务都将被利用(我期望每个子任务都将映射到我的主题中的一个分区)。

重新启动作业后,我发现有时使用了 3 个子任务,有时使用了 4 个任务,而其余的子任务保持空闲。

请您的支持澄清这种情况。

另外我怎么知道子镜头之间是否有洗牌?

我的代码:

ConsumerConfigurationData<String> consumerConfigurationData = new ConsumerConfigurationData<>();

Set<String> topicsSet = new HashSet<>();
topicsSet.add("flink-08");

consumerConfigurationData.setTopicNames(topicsSet);
consumerConfigurationData.setSubscriptionName("my-sub0111");
consumerConfigurationData.setSubscriptionType(SubscriptionType.Key_Shared);
consumerConfigurationData.setConsumerName("consumer-01");
consumerConfigurationData.setSubscriptionInitialPosition(SubscriptionInitialPosition.Earliest);

PulsarSourceBuilder<String> builder = PulsarSourceBuilder.builder(new SimpleStringSchema()).pulsarAllConsumerConf(consumerConfigurationData).serviceUrl("pulsar://localhost:6650");

SourceFunction<String> src = builder.build();
DataStream<String> stream = env.addSource(src);

stream.print(" >>> ");
4

1 回答 1

0

对于 Pulsar 的问题,我知道的不够多,无法提供帮助。我建议设置一个更大的测试,看看结果如何。通常,您的分区比插槽多,并且一些插槽以某种随机方式消耗多个分区。

另外我怎么知道子镜头之间是否有洗牌?

最简单的方法是查看 Flink Web UI 的拓扑。在那里你应该看到任务的数量和通道类型。如果您想要更多详细信息,您可以发布屏幕截图,但在这种情况下,没有任何东西会被打乱,因为您只有一个源和一个接收器。

于 2020-01-28T10:39:48.530 回答