Kafka 多维度系统精讲(11)- stream

1 kafka stream 基本概念

在这里插入图片描述
在这里插入图片描述

2 kafka 流处理关键词

在这里插入图片描述
在这里插入图片描述


在这里插入图片描述

3 案例

  • 新建 topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic stream-in
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic stream-out
  • 新建生产者
bin/kafka-console-producer.sh --broker-list node3:9092 --topic stream-in

hello apple cat hello
apple cat boy boy hello
  • 消费者
bin/kafka-console-consumer.sh --bootstrap-server node3:9092 --topic stream-out \
--property print.key=true \
--property print.value=true \
--property key.deserializer=org.apache.kafka.common.serialization.StringDeserializer \
--property value.deserializer=org.apache.kafka.common.serialization.LongDeserializer \
--from-beginning

package com.tzb.kafka.stream;

import org.apache.kafka.common.serialization.Serdes;
import org.apache.kafka.streams.KafkaStreams;
import org.apache.kafka.streams.StreamsBuilder;
import org.apache.kafka.streams.StreamsConfig;
import org.apache.kafka.streams.kstream.KStream;
import org.apache.kafka.streams.kstream.KTable;
import org.apache.kafka.streams.kstream.Produced;

import java.util.Arrays;
import java.util.Locale;
import java.util.Properties;

/**
 * @Description TODO
 * @Author tzb
 * @Date 2020/10/12 19:55
 * @Version 1.0
 **/
public class StreamSample {

    private static final String INPUT_TOPIC = "stream-in";

    private static final String OUT_TOPIC = "stream-out";

    public static void main(String[] args) {
        Properties prop = new Properties();
        prop.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "192.168.10.103:9092");
        prop.put(StreamsConfig.APPLICATION_ID_CONFIG, "wordcount-app");
        prop.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.String().getClass());
        prop.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.String().getClass());

        // 如何构建流结构拓扑
        final StreamsBuilder builder = new StreamsBuilder();

        // 构建 wordcount process
        final KafkaStreams streams = new KafkaStreams(builder.build(), prop);

        streams.start();

    }

    // 如何定义流计算过程
    static void wordcountStream(final StreamsBuilder builder) {

        // 不断从 INPUT_TOPIC 上获取新数据,并且追加到流上的一个抽象对象
        KStream<String, String> source = builder.stream(INPUT_TOPIC);

        // KTable是数据集合的抽象对象
        KTable<String, Long> count = source.flatMapValues(value -> Arrays.asList(value.toLowerCase(Locale.getDefault()).split(" ")))
                .groupBy((key, value) -> value)
                .count();

        count.toStream().to(OUT_TOPIC, Produced.with(Serdes.String(),Serdes.Long()));

    }

}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页