管理 Streams 应用程序主题
Kafka Streams 应用程序持续读取 Kafka 主题,处理读取的数据,然后 将处理结果写回 Kafka 主题。该应用程序还可以在 Kafka 代理,例如状态存储更改日志主题。本节介绍这些 Topic 类型和 如何管理主题和应用程序。
用户主题
用户主题存在于应用程序外部,并由应用程序读取或写入,包括:
- 输入主题
- 通过应用程序拓扑中的源处理器指定的主题;例如 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.type
CreateTime
- 对于内部重新分区主题,压缩策略为 ,保留时间为 (无限)。
delete
-1
- 对于键值存储的内部更改日志主题,压缩策略为 。
compact
- 对于窗口化键值存储的内部更改日志主题,压缩策略为 .保留时间设置为 24 小时加上您对窗口化存储的设置。
delete,compact
- 对于受版本控制的状态存储的内部更改日志主题,清理策略为 ,并设置为 24 小时加上存储的 historyRetentionMs 值。
compact
min.compaction.lag.ms