首页 文章

分区特定flink kafka消费者

提问于
浏览
1

我已经使用flink和kafka为mongodb oplog创建了一个流媒体程序 . 根据与Flink支持团队的讨论,无法通过kafka分区保证流式传输的订购 . 我创建了N个kafka分区,并希望每个分区创建N个flink kafka使用者,因此流式传输的顺序至少应该保留在特定的分区中 . 请建议我是否有可能创建分区特定的flink kafka消费者?

我使用env.setParallelism(N)进行并行处理 .

附图显示程序的高级架构
enter image description here

1 回答

  • 3

    经过大量的研究后,我在自己的问题上找到了解决方案 . 由于通过kafka分区的全局排序不实用,我创建了N个具有N flink并行性的kafka分区,并编写了一个自定义kafka分区程序,它将覆盖默认的kafka分区策略,并根据自定义分区程序中指定的逻辑将记录发送到特定分区 . 这可确保特定消息始终转到同一分区 . 设置flink并行性时,请记住以下几点 .

    1)kafka分区== flink parallelism:这种情况很理想,因为每个消费者负责一个分区 . 如果您的消息在分区之间 balancer ,则工作将均匀分布在flink运算符上;

    2)kafka分区<flink parallelism:一些flink实例不会收到任何消息 . 为避免这种情况,您需要在任何操作之前调用输入流上的重新 balancer ,这会导致数据被重新分区:

    3)kafka分区> flink parallelism:在这种情况下,一些实例将处理多个分区 . 再一次,您可以使用重新 balancer 来均匀地传播消息 .

相关问题