Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka streams 卡夫卡流媒体-由:org.rocksdb.RocksDBException引起-打开的文件太多_Apache Kafka Streams - Fatal编程技术网

Apache kafka streams 卡夫卡流媒体-由:org.rocksdb.RocksDBException引起-打开的文件太多

Apache kafka streams 卡夫卡流媒体-由:org.rocksdb.RocksDBException引起-打开的文件太多,apache-kafka-streams,Apache Kafka Streams,使用Kafka Streaming 2.4和DSL API 我正在进行有状态流处理,它连接到具有100个分区的用户主题。应用程序还引用具有与用户主题类似的默认分区的内部主题 观察下面的错误,所有任务线程最终都将关闭 你们能不能在获取公式以计算所需的打开文件描述符上加些指针 public class CustomRocksDBConfig implements RocksDBConfigSetter { private org.rocksdb.Cache cache = new org.rock

使用Kafka Streaming 2.4和DSL API

我正在进行有状态流处理,它连接到具有100个分区的用户主题。应用程序还引用具有与用户主题类似的默认分区的内部主题

观察下面的错误,所有任务线程最终都将关闭

你们能不能在获取公式以计算所需的打开文件描述符上加些指针

public  class CustomRocksDBConfig implements RocksDBConfigSetter {
private org.rocksdb.Cache cache = new org.rocksdb.LRUCache(2 * 1024L * 1024L * 1024L);
@Override
public void setConfig(final String storeName, final Options options, final Map<String, Object> configs) {
    BlockBasedTableConfig tableConfig = (BlockBasedTableConfig) options.tableFormatConfig();
    tableConfig.setBlockCache(cache);
    tableConfig.setBlockCacheSize(1024L * 1024L * 1024L);
    tableConfig.setBlockSize( 4 * 1024L);
    tableConfig.setCacheIndexAndFilterBlocks(true);
    options.setTableFormatConfig(tableConfig);
    options.setMaxWriteBufferNumber(7);
    options.setMinWriteBufferNumberToMerge(4);
    options.setWriteBufferSize(25 * 1024L * 1024L);}
Caused by: org.rocksdb.RocksDBException: While open a file for appending: /data/directory/generator.1583280000000/002360.sst: Too many open files
    at org.rocksdb.RocksDB.flush(Native Method)
    at org.rocksdb.RocksDB.flush(RocksDB.java:2394)
    at org.apache.kafka.streams.state.internals.RocksDBStore$SingleColumnFamilyAccessor.flush(RocksDBStore.java:581)
    at org.apache.kafka.streams.state.internals.RocksDBStore.flush(RocksDBStore.java:384)
    ... 17 more
公共类CustomRocksDBConfig实现RocksDBConfigSetter{
private org.rocksdb.Cache Cache=new org.rocksdb.LRUCache(2*1024L*1024L*1024L*1024L);
@凌驾
public void setConfig(最终字符串storeName、最终选项、最终映射配置){
BlockBasedTableConfig tableConfig=(BlockBasedTableConfig)options.tableFormatConfig();
tableConfig.setBlockCache(缓存);
tableConfig.setBlockCacheSize(1024L*1024L*1024L);
tableConfig.setBlockSize(4*1024L);
tableConfig.setCacheIndexandFilterBlock(true);
options.setTableFormatConfig(tableConfig);
选项。setMaxWriteBufferNumber(7);
options.setMinWriteBufferNumberToMerge(4);
options.setWriteBufferSize(25*1024L*1024L);}
原因:org.rocksdb.rocksdbeexception:打开文件进行追加时:/data/directory/generator.15832800000000/002360.sst:打开的文件太多
位于org.rocksdb.rocksdb.flush(本机方法)
位于org.rocksdb.rocksdb.flush(rocksdb.java:2394)
位于org.apache.kafka.streams.state.internals.RocksDBStore$SingleColumnFamilyAccessor.flush(RocksDBStore.java:581)
位于org.apache.kafka.streams.state.internals.RocksDBStore.flush(RocksDBStore.java:384)
…还有17个

增加ulimit后问题已解决。

请共享您的配置
ulimit-a
,感谢您的回复。nofile=65535,nproc=163840,管道缓冲区大小=4096,套接字缓冲区大小=4096,sigpend=257587,堆栈大小=10240,核心文件大小=0,锁定地址空间=64,nice=0,rtprio=0,其余不受限制或不受支持。RockedDB可以自定义配置了en streaming app,但计算所需打开文件描述符的公式未知。请告诉我您是否可以提供一些指导。正在尝试理解:[link]()[link]()您可能需要增加操作系统上的打开文件限制。--很难估计所需文件描述符的数量,因为这取决于许多因素。毫无疑问,您可能希望联系RocksDB社区。@MatthiasJ.Sax-感谢您的回复。使用默认配置和给定的生成密钥,kafka streaming不会将o在MemTable中,并立即创建sst以存储在statestore目录中。我的期望是在所有3个memtables都已满时刷新。这样可以访问较少的sst文件,并限制打开或创建多个文件