Kafka Streams API:我加入两个KStreams的empmodel

时间:2017-02-27 06:05:31

标签: apache-kafka-streams kafka-join

final KStream<String, EmpModel> empModelStream = getMapOperator(empoutStream);
final KStream<String, EmpModel> empModelinput = getMapOperator(inputStream);

//  empModelinput.print();
//  empModelStream.print();

empModelStream.join(empModelinput, new ValueJoiner<EmpModel, EmpModel, Object>() {

    @Override
    public Object apply(EmpModel paramV1, EmpModel paramV2) {
        System.out.println("Model1 "+paramV1.getKey());
        System.out.println("Model2 "+paramV2.getKey());
        return paramV1;
    }

},JoinWindows.of("2000L"));

我收到错误:

  

无效的拓扑构建:KSTREAM-MAP-0000000003和KSTREAM-MAP-0000000004不可连接

1 个答案:

答案 0 :(得分:3)

如果要加入两个KStreams,则必须确保两者具有相同数量的分区。 (参见http://docs.confluent.io/current/streams/developer-guide.html#joining-streams&#34;注意&#34; 框)

如果您使用Kafka v0.10.1+,则会自动进行重新分区(参见http://docs.confluent.io/current/streams/upgrade-guide.html#auto-repartitioning)。

对于Kafka v0.10.0.x,您有两种选择:

  1. 确保原始输入主题具有相同数量的分区
  2. 或者,在加入之前向.through("my-repartitioning-topic")之一添加对KStream的调用。在启动Streams应用程序之前,您需要使用正确数量的分区(即与第二个"my-repartioning-topic"的原始输入主题相同数量的分区)创建主题KStream