Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.kafka.streams.kstream.internals.graph;
import org.apache.kafka.common.serialization.Serde;
import org.apache.kafka.streams.kstream.internals.Change;
import org.apache.kafka.streams.kstream.internals.KTableKTableJoinMerger;
import org.apache.kafka.streams.processor.internals.InternalTopologyBuilder;
import org.apache.kafka.streams.state.StoreBuilder;
import org.apache.kafka.streams.state.TimestampedKeyValueStore;
import java.util.Arrays;
/**
* Too much specific information to generalize so the KTable-KTable join requires a specific node.
*/
public class KTableKTableJoinNode extends BaseJoinProcessorNode, Change, Change> {
private final Serde keySerde;
private final Serde valueSerde;
private final String[] joinThisStoreNames;
private final String[] joinOtherStoreNames;
private final StoreBuilder> storeBuilder;
KTableKTableJoinNode(final String nodeName,
final ProcessorParameters, ?, ?> joinThisProcessorParameters,
final ProcessorParameters, ?, ?> joinOtherProcessorParameters,
final ProcessorParameters, ?, ?> joinMergeProcessorParameters,
final String thisJoinSide,
final String otherJoinSide,
final Serde keySerde,
final Serde valueSerde,
final String[] joinThisStoreNames,
final String[] joinOtherStoreNames,
final StoreBuilder> storeBuilder) {
super(nodeName,
null,
joinThisProcessorParameters,
joinOtherProcessorParameters,
joinMergeProcessorParameters,
thisJoinSide,
otherJoinSide);
this.keySerde = keySerde;
this.valueSerde = valueSerde;
this.joinThisStoreNames = joinThisStoreNames;
this.joinOtherStoreNames = joinOtherStoreNames;
this.storeBuilder = storeBuilder;
}
public Serde keySerde() {
return keySerde;
}
public Serde valueSerde() {
return valueSerde;
}
public String[] joinThisStoreNames() {
return joinThisStoreNames;
}
public String[] joinOtherStoreNames() {
return joinOtherStoreNames;
}
public String queryableStoreName() {
return mergeProcessorParameters().kTableKTableJoinMergerProcessorSupplier().getQueryableName();
}
/**
* The supplier which provides processor with KTable-KTable join merge functionality.
*/
@SuppressWarnings("unchecked")
public KTableKTableJoinMerger joinMerger() {
final KTableKTableJoinMerger> merger =
mergeProcessorParameters().kTableKTableJoinMergerProcessorSupplier();
// this incorrect cast should be corrected by the end of the KIP-478 implementation
return (KTableKTableJoinMerger) merger;
}
@Override
public void writeToTopology(final InternalTopologyBuilder topologyBuilder) {
final String thisProcessorName = thisProcessorParameters().processorName();
final String otherProcessorName = otherProcessorParameters().processorName();
final String mergeProcessorName = mergeProcessorParameters().processorName();
topologyBuilder.addProcessor(
thisProcessorName,
thisProcessorParameters().processorSupplier(),
thisJoinSideNodeName());
topologyBuilder.addProcessor(
otherProcessorName,
otherProcessorParameters().processorSupplier(),
otherJoinSideNodeName());
topologyBuilder.addProcessor(
mergeProcessorName,
mergeProcessorParameters().processorSupplier(),
thisProcessorName,
otherProcessorName);
topologyBuilder.connectProcessorAndStateStores(thisProcessorName, joinOtherStoreNames);
topologyBuilder.connectProcessorAndStateStores(otherProcessorName, joinThisStoreNames);
if (storeBuilder != null) {
topologyBuilder.addStateStore(storeBuilder, mergeProcessorName);
}
}
@Override
public String toString() {
return "KTableKTableJoinNode{" +
"joinThisStoreNames=" + Arrays.toString(joinThisStoreNames()) +
", joinOtherStoreNames=" + Arrays.toString(joinOtherStoreNames()) +
"} " + super.toString();
}
public static KTableKTableJoinNodeBuilder kTableKTableJoinNodeBuilder() {
return new KTableKTableJoinNodeBuilder<>();
}
public static final class KTableKTableJoinNodeBuilder {
private String nodeName;
private ProcessorParameters, ?, ?> joinThisProcessorParameters;
private ProcessorParameters, ?, ?> joinOtherProcessorParameters;
private String thisJoinSide;
private String otherJoinSide;
private Serde keySerde;
private Serde valueSerde;
private String[] joinThisStoreNames;
private String[] joinOtherStoreNames;
private String queryableStoreName;
private StoreBuilder> storeBuilder;
private KTableKTableJoinNodeBuilder() {
}
public KTableKTableJoinNodeBuilder withNodeName(final String nodeName) {
this.nodeName = nodeName;
return this;
}
public KTableKTableJoinNodeBuilder withJoinThisProcessorParameters(final ProcessorParameters, ?, ?> joinThisProcessorParameters) {
this.joinThisProcessorParameters = joinThisProcessorParameters;
return this;
}
public KTableKTableJoinNodeBuilder withJoinOtherProcessorParameters(final ProcessorParameters, ?, ?> joinOtherProcessorParameters) {
this.joinOtherProcessorParameters = joinOtherProcessorParameters;
return this;
}
public KTableKTableJoinNodeBuilder withThisJoinSideNodeName(final String thisJoinSide) {
this.thisJoinSide = thisJoinSide;
return this;
}
public KTableKTableJoinNodeBuilder withOtherJoinSideNodeName(final String otherJoinSide) {
this.otherJoinSide = otherJoinSide;
return this;
}
public KTableKTableJoinNodeBuilder withKeySerde(final Serde keySerde) {
this.keySerde = keySerde;
return this;
}
public KTableKTableJoinNodeBuilder withValueSerde(final Serde valueSerde) {
this.valueSerde = valueSerde;
return this;
}
public KTableKTableJoinNodeBuilder withJoinThisStoreNames(final String[] joinThisStoreNames) {
this.joinThisStoreNames = joinThisStoreNames;
return this;
}
public KTableKTableJoinNodeBuilder withJoinOtherStoreNames(final String[] joinOtherStoreNames) {
this.joinOtherStoreNames = joinOtherStoreNames;
return this;
}
public KTableKTableJoinNodeBuilder withQueryableStoreName(final String queryableStoreName) {
this.queryableStoreName = queryableStoreName;
return this;
}
public KTableKTableJoinNodeBuilder withStoreBuilder(final StoreBuilder> storeBuilder) {
this.storeBuilder = storeBuilder;
return this;
}
@SuppressWarnings("unchecked")
public KTableKTableJoinNode build() {
return new KTableKTableJoinNode<>(
nodeName,
joinThisProcessorParameters,
joinOtherProcessorParameters,
new ProcessorParameters<>(
KTableKTableJoinMerger.of(
joinThisProcessorParameters.kTableProcessorSupplier(),
joinOtherProcessorParameters.kTableProcessorSupplier(),
queryableStoreName),
nodeName),
thisJoinSide,
otherJoinSide,
keySerde,
valueSerde,
joinThisStoreNames,
joinOtherStoreNames,
storeBuilder
);
}
}
}