JanusGraph 配置参数详解
详细介绍 JanusGraph 1.1 配置文件(实测 1.1.0),包括 janusgraph-cql.properties 与 janusgraph-cql-cluster.properties 全参数、gremlin-server.yaml 系列 Gremlin Server 配置、cassandra.yaml 存储后端关键参数、jvm-server.options 与 jvm-11.options 内存参数、remote.yaml 客户端连接配置,并给出参数默认值、数据类型、可变性与实测取值
JanusGraph 配置参数详解
目标:详解 JanusGraph 1.1(实测 1.1.0)全部关键配置文件与参数,包括图后端配置
janusgraph-*.properties、服务端配置gremlin-server*.yaml、存储后端配置cassandra.yaml、JVM 内存配置以及客户端连接配置remote.yaml。参数表标注默认值、数据类型与可变性(LOCAL / MASKABLE / GLOBAL)。
一、配置文件总览
JanusGraph 1.1.0 安装目录 /opt/janusgraph-1.1.0/conf/ 下的核心配置文件:
| 文件 | 作用 |
|---|---|
janusgraph-cql.properties | 图存储配置:CQL 后端,单节点 Cassandra |
janusgraph-cql-cluster.properties | 图存储配置:CQL 后端,Cassandra 集群 |
janusgraph-inmemory.properties | 图存储配置:纯内存后端(重启丢失) |
janusgraph-berkeleyje.properties | 图存储配置:本地文件后端 BerkeleyJE |
janusgraph-hbase.properties | 图存储配置:HBase 后端 |
gremlin-server.yaml | Gremlin Server 默认服务配置(inmemory) |
gremlin-server-cql.yaml | Gremlin Server 服务配置(CQL 单节点) |
gremlin-server-cql-cluster.yaml | Gremlin Server 服务配置(CQL 集群) |
remote.yaml | Gremlin Console 远端连接配置 |
jvm-11.options / jvm-8.options | Gremlin Server JVM 参数 |
log4j2-server.xml / log4j2-console.xml | 日志配置 |
启动时通过 janusgraph-server.sh start <yaml> 指定加载哪一份 Gremlin Server 配置,而该 yaml 的 graphs.graph 指向对应的图存储 properties 文件。
二、图存储配置 janusgraph-cql.properties 详解
单节点 CQL 后端的完整配置文件(/opt/janusgraph-1.1.0/conf/janusgraph-cql.properties)实测内容:
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=127.0.0.1
storage.cql.keyspace=janusgraph
storage.cql.local-datacenter=datacenter1
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5
2.1 gremlin.graph
| 参数 | 值 | 数据类型 | 可变性 |
|---|---|---|---|
| gremlin.graph | org.janusgraph.core.JanusGraphFactory | String | LOCAL |
指定图工厂类。JanusGraph 通过 JanusGraphFactory 依据 storage.backend 实例化对应的存储后端,该行不可省略。
2.2 storage.*(存储后端)
| 参数 | 值 | 默认值 | 数据类型 | 可变性 | 说明 |
|---|---|---|---|---|---|
| storage.backend | cql | (无) | String | LOCAL | 持久化后端简写名:berkeleyje、cql、hbase、inmemory、scylla,或完整类名 |
| storage.hostname | 127.0.0.1 | 127.0.0.1 | String[] | LOCAL | 存储后端服务器地址;集群时逗号分隔多个地址 |
| storage.port | (默认 9042) | 9042 | Integer | LOCAL | 存储后端端口(CQL 原生传输端口) |
| storage.cql.keyspace | janusgraph | janusgraph | String | LOCAL | 图数据 keyspace,不存在时自动创建 |
| storage.cql.local-datacenter | datacenter1 | datacenter1 | String | MASKABLE | 本地数据中心名,传入 CqlSessionBuilder.withLocalDatacenter |
| storage.cql.replication-factor | 2(集群)/ 1(单机) | 1 | Integer | LOCAL | keyspace 副本因子,需与 keyspace 实际副本数一致 |
2.3 cache.*(数据库级缓存)
| 参数 | 值 | 默认值 | 数据类型 | 可变性 | 说明 |
|---|---|---|---|---|---|
| cache.db-cache | true | false | Boolean | MASKABLE | 是否开启跨事务共享的数据库级缓存;开启后遍历更快,但可能读到稍旧数据 |
| cache.db-cache-clean-wait | 20 | 50 | Integer | MASKABLE | 缓存刷出后保留条目并允许后台清理的时间(ms) |
| cache.db-cache-time | 180000 | 10000 | Long | MASKABLE | 缓存条目过期时间(ms);0 表示永不过期 |
| cache.db-cache-size | 0.5 | 0.3 | Double | MASKABLE | 缓存占用堆比例(0~1 表示百分比,大于 1 视为字节数) |
三、集群版 janusgraph-cql-cluster.properties 详解
集群模式(双节点 Cassandra)实测配置(/opt/janusgraph-1.1.0/conf/janusgraph-cql-cluster.properties):
gremlin.graph=org.janusgraph.core.JanusGraphFactory
storage.backend=cql
storage.hostname=172.29.0.3,172.29.0.4
storage.port=9042
storage.cql.keyspace=janusgraph
storage.cql.local-datacenter=datacenter1
storage.cql.replication-factor=2
cache.db-cache=true
cache.db-cache-clean-wait=20
cache.db-cache-time=180000
cache.db-cache-size=0.5
与单机版相比的关键差异:
| 参数 | 单机版 | 集群版 | 说明 |
|---|---|---|---|
| storage.hostname | 127.0.0.1 | 172.29.0.3,172.29.0.4 | 填写所有 Cassandra 节点,客户端连接到任一存活节点即自动发现整个环 |
| storage.port | 默认 9042 | 显式 9042 | 显式声明便于排查 |
| storage.cql.replication-factor | 不写(默认 1) | 2 | 必须与 keyspace 副本因子一致,保证写入 Quorum |
四、Gremlin Server 配置 gremlin-server*.yaml 详解
4.1 完整文件(gremlin-server-cql.yaml,CQL 后端)
host: 0.0.0.0
port: 8182
evaluationTimeout: 30000
channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
graphManager: org.janusgraph.graphdb.management.JanusGraphManager
graphs: {
graph: conf/janusgraph-cql.properties
}
scriptEngines: {
gremlin-groovy: {
plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},
org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}}
processors:
- { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
- { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}
metrics: {
consoleReporter: {enabled: true, interval: 180000},
csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv},
jmxReporter: {enabled: true},
slf4jReporter: {enabled: true, interval: 180000},
graphiteReporter: {enabled: false, interval: 180000}}
maxInitialLineLength: 4096
maxHeaderSize: 8192
maxChunkSize: 8192
maxContentLength: 65536
maxAccumulationBufferComponents: 1024
resultIterationBatchSize: 64
writeBufferLowWaterMark: 32768
writeBufferHighWaterMark: 65536
4.2 关键参数详解
| 参数 | 值 | 说明 |
|---|---|---|
| host | 0.0.0.0 | 监听地址;对外服务必须监听 0.0.0.0 |
| port | 8182 | WebSocket 服务端口 |
| evaluationTimeout | 30000 | 单个脚本求值超时(ms),超时抛异常 |
| channelizer | WebSocketChannelizer | 通道实现;可选 HttpChannelizer(REST) |
| graphManager | JanusGraphManager | 图管理器;管理多图实例的初始化与关闭 |
| graphs.graph | conf/janusgraph-cql.properties | 指定加载的图存储配置文件(相对 Gremlin Server 工作目录) |
| scriptEngines.gremlin-groovy.plugins | JanusGraphGremlinPlugin 等 | 注册的插件:JanusGraph 图插件、Server 插件、TinkerGraph 插件、Import 插件、ScriptFile 插件 |
| SessionOpProcessor.sessionTimeout | 28800000 | 会话超时(ms),8 小时 |
| TraversalOpProcessor.cacheExpirationTime | 600000 | 遍历结果缓存过期时间(ms) |
| TraversalOpProcessor.cacheMaxSize | 1000 | 遍历结果缓存最大条目数 |
| metrics | 多 Repoter | 指标上报:console/csv/jmx/slf4j/graphite,实测启用前四种 |
| resultIterationBatchSize | 64 | 结果迭代批大小,控制每次推送给客户端的行数 |
| maxContentLength | 65536 | 请求内容最大字节数 |
| writeBufferLowWaterMark / HighWaterMark | 32768 / 65536 | 发送缓冲水位(byte),低于低水位发送、高于高水位暂停 |
五、存储后端 cassandra.yaml 关键参数详解
Cassandra 4.0.6 的 /opt/cassandra/conf/cassandra.yaml 中与 JanusGraph 部署密切相关的参数(实测):
| 参数 | 实测值 | 说明 |
|---|---|---|
| cluster_name | 'JanusGraph Cluster' | 集群名,所有节点必须一致 |
| num_tokens | 16 | 每节点 vnode 数,影响数据分布粒度 |
| seed_provider.parameters.seeds | "172.29.0.3,172.29.0.4" | 种子节点地址列表(逗号分隔),新节点通过种子加入环 |
| listen_address | 172.29.0.3 / 172.29.0.4 | 节点间通信监听地址(7000 端口),必须为本机可达 IP |
| rpc_address | 0.0.0.0 | CQL 客户端监听地址,配合 broadcast_rpc_address |
| broadcast_rpc_address | 172.29.0.3 / 172.29.0.4 | 广播给客户端连接的地址 |
| endpoint_snitch | SimpleSnitch | 机架感知策略,单数据中心用 SimpleSnitch |
| native_transport_port | 9042 | CQL 原生传输端口 |
| storage_port | 7000 | 节点间通信端口 |
| listen_interface | (用 listen_address 时不设) | 监听网卡名,与 listen_address 二选一 |
| data_file_directories | /var/lib/cassandra/data | 数据目录 |
| commitlog_directory | /var/lib/cassandra/commitlog | 提交日志目录 |
| saved_caches_directory | /var/lib/cassandra/saved_caches | 缓存目录 |
六、JVM 内存参数详解
6.1 Cassandra:jvm-server.options
Cassandra 4.0.6 的 /opt/cassandra/conf/jvm-server.options,JDK 17 下需显式固定堆并启用 G1:
-Xms2G
-Xmx2G
-XX:+UseG1GC
--add-exports java.base/java.lang=ALL-UNNAMED
--add-exports java.base/java.lang.reflect=ALL-UNNAMED
--add-exports java.base/sun.nio.ch=ALL-UNNAMED
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/sun.nio.ch=ALL-UNNAMED
| 参数 | 说明 |
|---|---|
| -Xms2G / -Xmx2G | 固定堆 2G。Cassandra 默认按物理内存动态计算堆大小(可达 8G),资源受限时会导致 OOM |
| -XX:+UseG1GC | G1 回收器。JDK 17 已移除 CMS,默认 jvm-server.options 中 CMS 相关行必须注释掉 |
| --add-exports / --add-opens | JDK 17 模块强封装豁免,缺失时启动报 IllegalAccessError/InaccessibleObjectException |
6.2 Gremlin Server:jvm-11.options
Gremlin Server 实测堆设置(资源受限环境固定为 1G):
-Xms1g
-Xmx1g
-XX:+UseThreadPriorities
-XX:+HeapDumpOnOutOfMemoryError
-Xss256k
-XX:+AlwaysPreTouch
-XX:+UseTLAB
-XX:+ResizeTLAB
-XX:+UseNUMA
-Dgremlin.io.kryoShimService=org.janusgraph.hadoop.serialize.JanusGraphKryoShimService
-XX:+UseG1GC
-XX:SurvivorRatio=8
-XX:MaxTenuringThreshold=1
关键项:-Xms1g -Xmx1g 固定堆;-XX:+HeapDumpOnOutOfMemoryError OOM 时生成堆转储;-Dgremlin.io.kryoShimService 指定 JanusGraph 的 Kryo 序列化实现。
七、客户端连接配置 remote.yaml 详解
Gremlin Console 通过 :remote connect tinkerpop.server conf/remote.yaml 连接 Gremlin Server,/opt/janusgraph-1.1.0/conf/remote.yaml:
hosts: [localhost]
port: 8182
serializer: { className: org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1, config: { serializeResultToString: true }}
| 参数 | 说明 |
|---|---|
| hosts | Gremlin Server 地址列表,集群连接多台服务器时列出所有地址 |
| port | Gremlin Server WebSocket 端口(8182) |
| serializer | 序列化协议;GraphBinary 是 TinkerPop 3.7 推荐协议,serializeResultToString: true 使结果以字符串输出便于阅读 |
八、配置加载顺序与生效方式
janusgraph-server.sh start <yaml>指定 Gremlin Server 配置文件(默认conf/gremlin-server/gremlin-server.yaml)。- yaml 中
graphs.graph指定图存储 properties 文件路径(相对/opt/janusgraph-1.1.0工作目录)。 - JanusGraph 启动时合并 properties 中所有
storage.*、cache.*等参数,并在首次连接时按需初始化 keyspace 与表。 - 修改 properties 或 yaml 后需
./bin/janusgraph-server.sh restart <yaml>或 systemctl restart 生效。 - 标为 MASKABLE 的参数可在运行时被事务覆盖(需配置文件允许动态配置),LOCAL 参数只读、修改后必须重启。