sen*_*iwu 7 stream apache-kafka apache-kafka-streams
我有一个 Kafka 生产者,它以高速率生成消息(消息键是让我们说用户名和值是他在游戏中的当前分数)。Kafka 消费者处理消费消息的速度相对较慢。这里我的要求是显示最新的分数并避免显示陈旧的数据,权衡可能永远不会显示某些分数。
基本上对于每个用户名,我可能在同一个分区中有数百条消息,但我总是想阅读最新的一条。
一个粗略的解决方案是这样的:生产者在每条消息和实际值写入数据库时只发送一个键,该数据库与消费者共享。消费者从队列中读取每个键并从数据库中读取值。在这里,始终读取最新值的目标是通过生产者覆盖数据库中的值来实现的——因此实际上正在读取给定键的消费者实际上将使用最新值。但由于读取和更新次数较多(慢、竞争条件等),该解决方案存在一些缺点。
我正在寻找在 kafka 或 kafka 流中解决这个问题的更自然的方法,我可以以某种方式定义从每个键的数据流中获取键的最新值。谢谢!
下面的代码有帮助
KStreamBuilder builder = new KStreamBuilder();
KTable<String, String> dataTable = builder.table("input-topic");
dataTable.toStream().foreach((key, message) -> client.post(message));
KafkaStreams streams = new KafkaStreams(builder, config);
streams.start();
Run Code Online (Sandbox Code Playgroud)
在实践中,使这成为可能的是传入流的内存压缩(详细信息请参见此处)。cache.max.bytes.buffering我们可以使用参数来控制压力commit.interval.ms
| 归档时间: |
|
| 查看次数: |
1528 次 |
| 最近记录: |