@Override
  public <M> OutputStream<M> getOutputStream(OutputDescriptor<M, ?> outputDescriptor) {
    addOutputDescriptor(outputDescriptor);

    String streamId = outputDescriptor.getStreamId();
    Serde serde = outputDescriptor.getSerde();
    KV<Serde, Serde> kvSerdes = getOrCreateStreamSerdes(streamId, serde);
    boolean isKeyed = serde instanceof KVSerde;
    outputStreams.put(streamId, new OutputStreamImpl<>(streamId, kvSerdes.getKey(), kvSerdes.getValue(), isKeyed));
    return outputStreams.get(streamId);
  }
The 0-based position of the next operator in the graph.
Part of the unique ID for each OperatorSpec in the graph.
Should only accessed and incremented via {@link #getNextOpId(OpCode, String)}.
samza-core/src/main/java/org/apache/samza/application/descriptors/StreamApplicationDescriptorImpl.java