public synchronized <KIn, VIn, KOut, VOut> Topology addProcessor(final String name,
                                                                     final ProcessorSupplier<KIn, VIn, KOut, VOut> supplier,
                                                                     final String... parentNames) {
        internalTopologyBuilder.addProcessor(name, supplier, parentNames);
        final Set<StoreBuilder<?>> stores = supplier.stores();
        if (stores != null) {
            for (final StoreBuilder<?> storeBuilder : stores) {
                internalTopologyBuilder.addStateStore(storeBuilder, name);
            }
        }
        return this;
    }
Add a new processor node that receives and processes records output by one or more parent source or processor
node.
Any new record output by this processor will be forwarded to its child processor or sink nodes.
If {@code supplier} provides stores via {@link ConnectedStoreProvider#stores()}, the provided {@link StoreBuilder}s
will be added to the topology and connected to this processor automatically.

@param name the unique name of the processor node
@param supplier the supplier used to obtain this node's {@link Processor} instance
@param parentNames the name of one or more source or processor nodes whose output records this processor should receive
and process
@return itself
@throws TopologyException if parent processor is not added yet, or if this processor's name is equal to the parent's name
streams/src/main/java/org/apache/kafka/streams/Topology.java