当前位置: 首页 > 知识库问答 >
问题:

在生成数据时,闪烁并行性和kafka分区之间有什么关系?

端木夕
2023-03-14

我有一个关于将数据放入Kafka主题的流作业,另一个流作业使用Kafka主题中的数据。我的Kafka群集的分区号配置为3。

当我将作业的并行性设置为4时,只有3个插槽忙于生成数据,只有3个使用者子任务获取了数据。

考虑到任务槽数量的限制,我想将并行性更改为1。但是,当我将作业的并行性设置为1时,只有1个使用者任务槽获得了数据。

在我看来,即使我将并行度设置为1,我仍然将数据放入3个分区,并且可以有3个消费子任务使用数据。

为什么只有一个消费者子任务在这里工作?

共有1个答案

公西俊能
2023-03-14

每个Kafka分区只能由一个FlinkKafkaConsumer子任务使用,但FlinkKafkaConsumer可以从一个或多个分区使用。给定一个有3个分区的主题,最多可以为3个FlinkKafkaConsumers分配工作。

Flink任务槽最多只能有一个作业中每个任务的实例。插槽数等于最大可用并行度。

类似地,Kafka分区的数量设置了最大可实现并行性的上限。

当并行度设置为1时,将只使用一个插槽,该插槽只能有一个FlinkKafkaConsumer(和一个FlinkKafKapProducer)。但一个消费者可以处理所有3个分区。如果并行度设置为3,那么3个使用者可能很忙,每个使用者在自己的插槽中处理一个分区。当并行度设置为4时,一个插槽将处于空闲状态。

在接收器中,默认情况下FlinkKafkaProducer的每个实例将以循环方式写入每个分区。如果希望控制每条记录写入哪个分区,可以提供一个自定义的FlinkKafkaPartitioner,或者可以使用KafkaSerializationSchema并为每条生产记录指定分区。

 类似资料:
  • 我正在阅读《Stream Processing with Apache Flink》一书,书中说:“从版本0.10.0开始,Kafka支持消息时间戳。当从Kafka版本0.10或更高版本读取时,如果应用程序以事件时间模式运行,使用者将自动提取消息时间戳作为事件时间戳*“因此在函数中,调用将默认返回Kafka消息时间戳?请提供一个简单的示例,说明如何实现AssignerWithPeriodicalW

  • 以下是我从Kafka的一个话题中对消费信息的理解。 使用者组负责从单个主题读取信息。如果一个主题有 5 个分区,并且使用者组中有 5 个使用者,则每个使用者从一个整个分区读取信息。如果我在使用者组中添加另一个使用者,则新添加的使用者将处于空闲状态。 与其将新消费者置于空闲状态,为什么Kafak不允许从已经被不同消费者消费的分区中消费信息?如果发生这种情况,将会有更多的并行性。 所以在jist中:在

  • 我正在阅读Flink示例CountWithTimestamp,下面是该示例的代码片段: 我的问题是,如果我删除onTimer中的if语句(收集未触摸的stmt),而代之以processElement开头的另一个if语句

  • 在Samza和Kafka流中,数据流处理是在处理步骤(在Samza中称为“dataflow graph”,在Kafka流中称为“topology”)的序列/图(在Samza中称为“job”,在Kafka流中称为“processor”)中执行的。 假设我们有一个非常简单的工作流程,由一个工作者a组成,该工作者a消耗传感器测量值并过滤所有低于50的值,然后是一个工作者B,该工作者B接收剩余的测量值并过

  • 问题内容: 在此示例中: 无法编译为: 而被编译器接受。 这个答案说明唯一的区别是,与不同,它允许您稍后引用类型,似乎并非如此。 是什么区别,并在这种情况下,为什么不第一编译? 问题答案: 通过使用以下签名定义方法: 并像这样调用它: 在jls§8.1.2中,我们发现(有趣的部分被我加粗了): 通用类声明定义了一组参数化类型(第4.5节), 每种可能通过类型arguments调用类型参数节的类型

  • 我用经纪人ID的20、21、22创建了3个Kafka经纪人设置。然后我创建了这个主题: 其结果是: 当生产者向主题zeta发送消息“Hello World”时,Kafka首先将消息写入哪个分区? 如果我有8个用户在他们自己的进程或线程中并行地运行,并订阅了zeta主题,那么Kafka如何分配分区或代理来并行地为这些用户服务?