在Kafka流中使用Redis池安全吗?

时间:2018-09-18 15:28:22

标签: java redis apache-kafka apache-kafka-streams

所以,问题是关于在过滤器,地图等流函数内部使用外部状态存储的安全性。

可以这样做吗?

JedisPool pool = ...;
KStream stream = ...;
stream.map((k, v) -> {
    JedisClient client = pool.getResource();
    ....
    client.close();
});
...
KafkaStreams streams = ...;

是否由于在多个流任务中使用单个池而导致错误? 在apache flink中,我可以使用Rich*Function<>,在其中open方法中,我只能将连接池配置到任何存储。在Apache Spark中,我还可以配置全局连接。我是否需要使用kafka流执行相同的操作?

2 个答案:

答案 0 :(得分:2)

等效于Rich*Function的方法是使用transform()而不是map(),它允许您init()close()使用Transformer

即使您可能想try-catch以确保执行close(),您的方法也应该起作用。但是,这不是推荐的模式。

根据您的用例,最好将Redis中的数据加载到Kafka主题(不确定是否有Redis连接器)中,然后将数据加载到KTable中。您可以执行流表联接来代替map()transform()

答案 1 :(得分:-1)

不建议将Redis用于Spring Cloud Stream的生产中-活页夹功能不完全,可能导致消息丢失。