我知道Kafka不是k / v商店,但请耐心等待。假设它是使用下面的k / v API粗略实现的。每个键都是一个主题,而当前的"值"密钥是写入主题的最后一条消息:
put(key, value) --> publish(topic=key, message=value)
get(key) --> consume(topic=key, offset = last_offset - 1)
此外,假设在不同的Kafka集群之间复制状态(使用MirrorMaker双向),以允许用户读取/写入更近的数据中心以减少延迟。
我已经知道这样做有一些明显的副作用,例如:
这里主要关注的是延迟,尤其是不同群集之间的延迟。与传统的k / v解决方案(如Redis,memcached或etcd)相比,您认为此解决方案如何在压力较大的工作负载(例如,针对给定密钥/主题的数千次写入/秒)和紧张的网络条件下保持不变? / p>
思想?
谢天谢地。
答案 0 :(得分:2)
Kafka可以作为KV活动商店,实际上已经实施了改进:https://cwiki.apache.org/confluence/display/KAFKA/KIP-67%3A+Queryable+state+for+Kafka+Streams
以下是一些链接,其中包含有关如何使用Kafka Streams查询存储在Kafka中的状态的更多示例:https://blog.codecentric.de/en/2017/03/interactive-queries-in-apache-kafka-streams/,https://www.confluent.io/blog/unifying-stream-processing-and-interactive-queries-in-apache-kafka/
默认使用RocksDB但可插入:https://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple/
您必须考虑如何在应用程序级别管理存储,但实际上,您的问题由Kafka Streams API管理。
希望这有帮助。