管理 Streams 应用程序主题

Kafka Streams 应用程序持续读取 Kafka 主题,处理读取的数据,然后 将处理结果写回 Kafka 主题。该应用程序还可以在 Kafka 代理,例如状态存储更改日志主题。本节介绍这些 Topic 类型和 如何管理主题和应用程序。

Kafka Streams 区分用户主题内部主题

用户主题

用户主题存在于应用程序外部,并由应用程序读取或写入,包括:

输入主题
通过应用程序拓扑中的源处理器指定的主题;例如 via 和 .StreamsBuilder#stream()StreamsBuilder#table()Topology#addSource()
输出主题
通过应用程序拓扑中的接收器处理器指定的主题;例如 via 和 .KStream#to()KTable.to()Topology#addSink()
中间主题
主题既是应用程序拓扑的输入主题,也是输出主题。

用户主题必须提前创建并手动管理(例如,通过主题工具)。如果用户主题在多个应用程序之间共享以供读取,并且 编写时,应用程序用户必须协调 Topic 管理。如果用户主题是集中管理的,那么应用程序 然后,用户不需要自己管理主题,而只需获得对主题的访问权限。

注意

您不应在 broker 上使用 auto-create topic 功能来创建用户主题,因为:

  • 您的 Kafka 集群中可能会禁用主题的自动创建。
  • 自动创建会自动应用默认主题设置,例如 replicaton 因子。对于某些输出主题(例如,在 Kafka 代理配置中),这些默认设置可能不是您想要的。auto.create.topics.enable=true

内部主题

内部主题由 Kafka Streams 应用程序在执行时在内部使用,例如 状态存储的 changelog 主题。这些主题由应用程序创建,并且仅供该流应用程序使用。

如果在 Kafka 代理上启用了安全性,则必须授予底层客户端管理员权限,以便它们可以 创建内部主题集。有关更多信息,请参阅 Streams 安全性

注意

内部主题遵循命名约定 ,但此约定 不保证将来的版本。<application.id>-<operatorName>-<suffix>

以下设置适用于内部主题的默认配置:

  • 对于所有内部主题,设置为 。message.timestamp.typeCreateTime
  • 对于内部重新分区主题,压缩策略为 ,保留时间为 (无限)。delete-1
  • 对于键值存储的内部更改日志主题,压缩策略为 。compact
  • 对于窗口化键值存储的内部更改日志主题,压缩策略为 .保留时间设置为 24 小时加上您对窗口化存储的设置。delete,compact
  • 对于受版本控制的状态存储的内部更改日志主题,清理策略为 ,并设置为 24 小时加上存储的 historyRetentionMs 值。compactmin.compaction.lag.ms