KStream

A KStream can be transformed record by record, joined with another KStream, KTable, GlobalKTable, or can be aggregated into a KTable. Kafka Streams DSL can be mixed-and-matched with Processor API (PAPI) (c.f. TopologyBuilder) via process(...), transform(...), and transformValues(...).

KStream是KeyValue对记录流的抽象,即。,每个记录在现实世界中都是一个独立的实体/事件。例如,用户X可能会购买两个项目I1和I2,因此,流中可能有两条记录

KStream是由一个或多个Kafka主题定义的,这些主题被消息或KStream转换的结果所消耗。KTable也可以转换成KStream。

一个KStream可以通过记录进行转换,与另一个KStream、KTable、GlobalKTable连接,也可以聚合为KTable。Kafka Streams DSL可以通过process(…)、transform(…)和transformValues(…)来与处理器API (PAPI) (TopologyBuilder)混合匹配。

KStream_第1张图片

KStream_第2张图片

使用不带窗口的左equi连接,用KTable的记录连接此流的记录。与内部连接不同,来自此流的所有记录将生成一个输出记录(cf. below)。join是与join属性流一起的主键表查找连接。= = table.key的关键。“表查找连接”是指只有在处理KStream记录时才计算结果。这是通过查找当前的匹配记录来完成的。,处理时间)内部KTable状态。相反,处理KTable输入记录只会更新内部KTable状态,不会产生任何结果记录。

对于每个KStream记录天气,它在KTable中找到一个对应的记录,将调用提供的ValueJoiner来计算结果记录的值(具有任意类型)。如果查找过程中没有发现KTable记录,则将向ValueJoiner提供一个空值。结果记录的键与两个连接输入记录的键相同。如果KStream输入记录键或值为null,则该记录将不包含在join操作中,因此不会向结果KStream添加任何输出记录。

例子:

kstream ktable状态结果

< K1:> < K1:ValueJoiner(A,null)>

< K1:b > < K1:b >

< K1:C > < K1:b > < K1:ValueJoiner(C,b)>

两个输入流(或者更准确地说,它们的底层源主题)都需要具有相同数量的分区。如果不是这种情况,您需要在执行连接之前为这个KStream调用(String),使用与给定KTable具有相同数量的分区的预定义主题。此外,两个输入流都需要在join键上进行共同分区(即。,使用相同的分割程序);参看加入(GlobalKTable KeyValueMapper ValueJoiner)。如果不满足此需求,Kafka流将自动重新划分数据,例如。,它将在Kafka中创建一个内部重新分区主题,并在实际连接之前通过这个主题编写和重新读取数据。repartitioning主题将命名为“${applicationId}-XXX-repartition”,其中用户通过参数APPLICATION_ID_CONFIG在StreamsConfig中指定“applicationId”,“XXX”是一个内部生成的名称,“-repartition”是一个固定的后缀。您可以通过kafkastream . tostring()检索所有生成的内部主题名。

重新划分只能发生在KStream上,而不能发生在提供的KTable上。对于这种情况,流的所有数据将通过重新分配的主题重新分配,并将所有记录写入它,并重新读取它的所有记录,这样,连接输入KStream就会在它的键上正确地分区。

类型参数:

VT -表的值类型

VR——结果流的值类型

参数:

表-将与此流连接的KTable

joiner -一个ValueJoiner,为一对匹配的记录计算连接结果。

键serde -键serdes实现这个流。如果没有指定,则将使用配置中定义的默认serdes

valSerde -值serdes用于实现这个流,如果没有指定configs中定义的默认serdes,则将使用它

返回:

一个KStream,包含每个键的连接记录和由给定的ValueJoiner计算的值,每个输入KStream记录的一个输出

KStream_第3张图片

创建一个新的KStream,其中包含满足给定谓词的该流的所有记录。所有不满足谓词的记录都被删除。这是一个无状态的逐记录操作。

参数:

谓词-应用于每个记录的筛选谓词

返回:

只包含满足给定谓词的记录的KStream


你可能感兴趣的:(kafka)