Вы можете извлечь DAG топологии несколькими способами.
Когда вы создаете свою топологию (например, с помощью TopologyBuilder), вы получите экземпляр StormTopology
.Он содержит SpoutSpec
и BoltSpec
объекты https://github.com/apache/storm/blob/8a475696e908c53f1c06bf1a8f373d8ac0483427/storm-client/src/jvm/org/apache/storm/generated/StormTopology.java#L45. Каждый из них содержит ComponentCommon
, который содержит список inputs
и streams
(выходы) https://github.com/apache/storm/blob/master/storm-client/src/jvm/org/apache/storm/generated/ComponentCommon.java#L39.
ЕслиВы уже отправили топологию, и она работает, вы можете получить аналогичную информацию, нажав на сервер интерфейса пользователя Storm.URL-адрес, который вы хотите получить: <your-ui-host>/api/v1/topology/<your-topology-id>/visualization
Например, вот вывод, который я получаю при локальном запуске тестовой топологии, немного очищенный:
$ curl localhost:8080/api/v1/topology/wc-test-1-1548158863/visualization
{
"split": {
":link": "\/component.html?id=split&topology_id=wc-test-1-1548158863",
":capacity": 0.1895867768595,
":type": "bolt",
":inputs": [
{
":component": "spout",
":grouping": "shuffle",
":stream": "default",
":sani-stream": "default"
}
],
},
"spout": {
":link": "\/component.html?id=spout&topology_id=wc-test-1-1548158863",
":capacity": 0,
":type": "spout",
":inputs": [
{
":component": "__acker",
":grouping": "direct",
":stream": "__ack_reset_timeout",
":sani-stream": "_s__ack_reset_timeout"
},
{
":component": "__acker",
":grouping": "direct",
":stream": "__ack_ack",
":sani-stream": "_s__ack_ack"
},
{
":component": "__acker",
":grouping": "direct",
":stream": "__ack_fail",
":sani-stream": "_s__ack_fail"
}
],
},
"count": {
":link": "\/component.html?id=count&topology_id=wc-test-1-1548158863",
":capacity": 0.22859504132231,
":type": "bolt",
":inputs": [
{
":component": "split",
":grouping": "fields",
":stream": "default",
":sani-stream": "default"
}
]
}
}
Как видите,У меня есть один носик, который читает с помощью болта, разделительный болт, который читает с носика, и болт "отсчета", который читает с болта "сплит".