Kafka Streams实战-开发入门

本文详细介绍了Kafka Streams的使用,包括KStream对象、Hello World示例、ZMart应用程序的开发,以及如何进行交互式开发和应对新增需求。文中涉及配置Kafka Streams、创建Serde实例、构建处理拓扑以及过滤和拆分数据流等操作。
摘要由CSDN通过智能技术生成

本文会介绍:

  • 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

Properties props = new Properties();
props.put(StreamsConfig.APPLICATION_ID_CONFIG, "hello-world");
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例子的拓扑图:

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

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

2.4 创建和启动KStream

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

3. ZMart应用程序

3.1 主要的需求

  • 记录所有客户的消费数据,但要保护敏感信息,例如信用卡号码
  • 抽取消费地点的ZIP code,
评论 73
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值