当前位置:   article > 正文

Kafka Streams实战-开发入门_kafka-streams hello-world

kafka-streams hello-world

本文会介绍:

  • Kafka Streams APIs
  • Kafka Streams的Hello World例子
  • 深入探索基于Kafka Streams的ZMart应用程序
  • 把输入流拆分为多个流

1. Streams APIs

Kafka有两类流APIs,low-level Processor API和high-level Streams DSL。本文介绍的是后者DSL,它的核心是KStream对象,表示流式key/value的数据,它的大多数方法都返回KStream对象的引用。

早在2005年,Martin Fowler和Eric Evans开发了fluent interface的概念,也就是接口的返回值和调用时传入的实例是相同的。这种方式对构造多个参数的对象时非常有用,例如:

Person.builder().firstName("Beth").withLastName("Smith").withOccupation("CEO");

在Kafka Streams中,有个重要的区别:返回的KStream对象是一个新的实例,而不是调用方法时的实例。

2. Hello World例子

以下让我们创建一个简单的Hello World例子,把输入的字母转换为大写字母。一般的开发流程是:

  • 配置Kafka Streams
  • 创建Serde实例
  • 创建处理的拓扑
  • 创建和启动KStream

2.1 配置Kafka Streams

  1. Properties props = new Properties();
  2. props.put(StreamsConfig.APPLICATION_ID_CONFIG, "hello-world");
  3. props.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");

以上两个属性是必须的,因为它们没有默认值。而且应用的ID在集群内必须是唯一的,服务器地址可以是单个服务器和端口,也可以是由逗号分隔的多个服务器和端口,例如"host1:9092,host2:9092,host3:9092"。

2.2 创建Serde实例

在Kafka Streams中,Serdes类提供了创建Serde实例的简便方法,如下所示:

Serde<String> stringSerde = Serdes.String();

此行代码是使用Serdes类创建序列化/反序列化所需的Serde实例。Serdes类为以下类型提供默认的实现:String、Byte array、Long、Integer和Double。

2.3 创建处理的拓扑

每个流应用程序都实现并执行至少一个拓扑。拓扑(在其它流处理框架中也称为有向无环图DAG,Directed Acyclic Graph)是一系列的操作和转换,每个事件从输入流动到输出。下图是Hello World例子的拓扑图:

下面是相应的处理拓扑代码:

  1. StreamsBuilder builder = new StreamsBuilder();
  2. KStream<String, String> simpleFirstStream = builder.stream("src-topic",
  3.     Consumed.with(stringSerde, stringSerde));
  4. // 使用KStream.mapValues方法把每行输入转换为大写
  5. KStream<String, String> upperCasedStream = simpleFirstStream.mapValues(line -> line.toUpperCase());
  6. // 把转换结果输出到另一个topic
  7. upperCasedStream.to("out-topic", Produced.with(stringSerde, stringSerde));

2.4 创建和启动KStream

  1. KafkaStreams kafkaStreams = new KafkaStreams(builder.build(), props);
  2. kafkaStreams.start();

3. ZMart应用程序

3.1 主要的需求

  • 记录所有客户的消费数据,但要保护敏感信息,例如信用卡号码
  • 抽取消费地点的ZIP code,以便分析消费模式
  • 抽取客户编号和消费金额,以便计算奖励积分
  • 保存所有消费数据,以便日后进行数据分析
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/639905
推荐阅读
相关标签
  

闽ICP备14008679号