Манипулирование топологией штормов - PullRequest
0 голосов
/ 21 января 2019

Я новичок в Apache Storm .. Я пытаюсь что-то сделать, но я не знаю, возможно ли это ... Я создал прямой граф и хотел сослаться на топологию шторма, которую я изучаю ... какя могу соединить носик и болты с этим графиком?для того, чтобы провести некоторый анализ, например, определение шаблона на графике ... это возможно?код графика здесь

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class DirectGraph<V> {
private Map<V, List<Edge<V>>> neighbors = new HashMap<V,   

List<Edge<V>>>();

public String toString() {
    StringBuffer s = new StringBuffer();
    s.append("digraph G {");
    for (V v : neighbors.keySet()) {
        if (neighbors.get(v).size() > 0)
             for (Edge edge : neighbors.get(v)) {
                 s.append("\n  " + v + " -> " + edge);
             }
        else {
            continue;
        }
    }
    s.append("\n}");
    return s.toString();
}

public void add(V vertex) {

    if (neighbors.containsKey(vertex))
        return;
    neighbors.put(vertex, new ArrayList<Edge<V>>());
}

public void add(V from, V to, String label) {
    this.add(from);
    this.add(to);
    neighbors.get(from).add(new Edge<V>(to, label));
}

public static class Edge<V> {
    private V vertex;
    private String label;

    public Edge(V v, String l) {
        vertex = v;
        label = l;
    }

    @Override
    public String toString() {
        return vertex + " [label=\"" + label + "\"];";
    }
}

}

1 Ответ

0 голосов
/ 22 января 2019

Вы можете извлечь 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"
      }
    ]
  }
}

Как видите,У меня есть один носик, который читает с помощью болта, разделительный болт, который читает с носика, и болт "отсчета", который читает с болта "сплит".

...