Tsering
05/10/2023, 10:42 AMProcessFunction and after that process function i just sink the data, the problem is that i am facing unevenly distribution of data across the parallelism, can someone please enlight me on this?Tsering
05/10/2023, 11:30 AMTsering
05/10/2023, 11:37 AM/**
* Hello world!
*
*/
public class FlinkApp{
private static final ObjectMapper jsonParser = new ObjectMapper();
private static final String region = "cn-northwest-1";
private static final String inputStreamName = "bot-webb-splunk-kinesis";
private static final String FAIRNESS_FIREHOUSE = "fairness-firehouse";
private static final String EDGEKV_FIREHOUSE = "bot-webb-splunk-firehose-edgekv";
private static DataStream<String> createSourceFromStaticConfig(StreamExecutionEnvironment env) {
Properties inputProperties = new Properties();
inputProperties.setProperty(ConsumerConfigConstants.AWS_REGION, region);
inputProperties.setProperty(ConsumerConfigConstants.STREAM_INITIAL_POSITION, "LATEST");
return env.addSource(new FlinkKinesisConsumer<>(inputStreamName,
new SimpleStringSchema(), inputProperties));
}
private static KinesisFirehoseSink<String> fairnessFirehoseSink() {
Properties sinkProperties = new Properties();
sinkProperties.setProperty(AWS_REGION, region);
return KinesisFirehoseSink.<String>builder()
.setFirehoseClientProperties(sinkProperties)
.setSerializationSchema(new SimpleStringSchema())
.setDeliveryStreamName(FAIRNESS_FIREHOUSE)
.build();
}
private static KinesisFirehoseSink<String> edgeKVFirehoseSink() {
Properties sinkProperties = new Properties();
sinkProperties.setProperty(AWS_REGION, region);
return KinesisFirehoseSink.<String>builder()
.setFirehoseClientProperties(sinkProperties)
.setSerializationSchema(new SimpleStringSchema())
.setDeliveryStreamName(EDGEKV_FIREHOUSE)
.build();
}
public static void main(String[] args) throws Exception {
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
final OutputTag<String> edgeKVOutput = new OutputTag<String>("edgekv-output"){};
DataStream<DataRecord> input = createSourceFromStaticConfig(env).map(data -> jsonParser.readValue(data, DataRecord.class)).name("xxxxxxx-kinesis source");
final SingleOutputStreamOperator<String> mainDS = input.process(new ProcessFunction<DataRecord, String>() {
@Override
public void processElement(DataRecord dataRecord, ProcessFunction<DataRecord, String>.Context ctx, Collector<String> out) throws Exception {
if (dataRecord.getMetadata() != null && dataRecord.getMetadata().size() > 0) {
List<String> destinations = dataRecord.getMetadata().get(0).get("destination");
if (destinations != null && destinations.contains("fairness") && destinations.contains("edgeKV")) {
// emit data to edgeKV DataStream
ctx.output(edgeKVOutput, dataRecord.toString());
// emit data to fairness DataStream
out.collect(dataRecord.toString());
} else if (destinations != null && destinations.contains("fairness")) {
out.collect(dataRecord.toString());
} else if (destinations != null && destinations.contains("edgeKV")) {
ctx.output(edgeKVOutput, dataRecord.toString());
}
}
}
}).name("Data Processor");
DataStream<String> sideOutput = mainDS.getSideOutput(edgeKVOutput);
sideOutput.sinkTo(fairnessFirehoseSink()).name("sink to EdgeKV Firehouse");
mainDS.sinkTo(edgeKVFirehoseSink()).name("sink to Fairness Firehouse");
env.execute("Minimum Stock Price");
}
}Jeremy Ber
05/10/2023, 1:20 PMTsering
05/10/2023, 3:57 PMTsering
05/10/2023, 4:00 PMJeremy Ber
05/10/2023, 6:12 PMTsering
05/11/2023, 1:49 AMTsering
05/11/2023, 1:50 AMJeremy Ber
05/11/2023, 1:57 AMTsering
05/11/2023, 1:58 AMJeremy Ber
05/11/2023, 2:01 AMJeremy Ber
05/11/2023, 2:01 AMTsering
05/11/2023, 2:02 AMTsering
05/11/2023, 1:02 PMJeremy Ber
05/11/2023, 1:05 PMTsering
05/11/2023, 1:08 PMTsering
05/11/2023, 1:09 PMJeremy Ber
05/11/2023, 1:26 PMTsering
05/18/2023, 3:07 AM*-firehose but in my code i wrote *-firehouse 🤣.