java - 使用 kafka 流根据消息密钥向主题发送消息
问题描述
我希望能够根据消息键的键将 Kafkastream 中的所有记录发送到不同的主题。前任。Kafka 中的流包含名称作为键和记录作为值。我想根据记录的键将这些记录扇出到不同的主题
数据:(jhon -> {jhonsRecord}),(sean -> {seansRecord}),(mary -> {marysRecord}),(jhon -> {jhonsRecord2}),预期
- topic1 :name: jhon ->(jhon -> {jhonsRecord}),(jhon -> {jhonsRecord2})
- topic2 :sean-> (sean -> {seansRecord})
- topic3 :mary -> (mary -> {marysRecord})
下面是我现在这样做的方式,但由于名称列表很长,所以速度很慢。另外,即使有几个名字的记录,我也需要遍历整个列表请提出修复
for( String name : names )
{
recordsByName.filterNot(( k, v ) -> k.equalsIgnoreCase(name)).to(name);
}
解决方案
我认为你应该使用KStream::to(final TopicNameExtractor<K, V> topicExtractor)
函数。它使您能够计算每条消息的主题名称。
示例代码:
final KStream<String, String> stream = ???;
stream.to((key, value, recordContext) -> key);
推荐阅读
- node.js - Cpanel 上的 Nodejs 环境变量
- java - 为什么java队列在某些情况下无法轮询数据?
- python - 为什么我在 pygame 上的圈子不断消失和重新生成?
- git - 将两台不同机器上的两个预先存在的本地文件夹合并到一个共享的在线存储库中
- unreal-engine4 - 在虚幻引擎 4 中构建光照后的黑色树叶
- c++ - 将人员添加到结构的 STL 列表
- javascript - 使用用户定义类型数组作为参数在nodejs中调用DB2存储过程
- c - 为什么在 C 中使用浮点转换说明符时没有输出
- ios - SwiftUI:语音识别通过 ipad 上的崩溃在 iphone 上工作
- jquery-easyui - 如何禁用jquery-easyui的标签滚动