如何在KafkaStreams中控制Rocksdb共享对象的位置

时间:2018-07-03 14:46:31

标签: apache-kafka apache-kafka-streams rocksdb

我有一个Kafka Streams应用程序。在将代码部署到我们的质量检查服务器之前,我对rocksdb或Kafka Streams没有任何问题。应用程序流状态设置为错误,这是错误消息:

ERROR com.sial.notifications.kafka.streams.AuditStream - Thread: notification-messages-ecf5f120-5cfb-4a2a-91b5-b145e99c3014-StreamThread-1 Uncaught streams exception /tmp/librocksdbjni6472682265799189638.so: /tmp/librocksdbjni6472682265799189638.so: failed to map segment from shared object: Operation not permitted

应用程序启动时,会将Rocksdb共享对象写到/ tmp。但是出于安全目的,服务器会挂载/ tmp noexec,因此我们无法从/ tmp运行共享对象。有什么方法可以控制代码的写位置吗?

我发现可以通过设置java.io.tmpdir系统属性来更改它,但这似乎很繁重,并且可能与其他软件包产生副作用。是否有特定于Rocksdb或Kafka流的系统属性来确定将其写入何处?

1 个答案:

答案 0 :(得分:0)

我还在尝试配置kafka使用者存储其内容的位置,我认为您可以设置一个属性来做到这一点:

state.dir - Directory location for state stores (default value /tmp/kafka-streams)

所以我认为在创建KafkaStreamsConfiguration时,您可以在其中注入属性:

StreamsConfig.STATE_DIR_CONFIG 

也有here

如果要查看属性的完整列表,可以进入here