code: public static Map<String, Map<String, MkGrouper>> outbound_components(
              TopologyContext topology_context, WorkerData workerData) {
          Map<String, Map<String, MkGrouper>> rr = new HashMap<>();
  
          // <Stream_id,<component,Grouping>>
          Map<String, Map<String, Grouping>> output_groupings = topology_context.getThisTargets();
          for (Entry<String, Map<String, Grouping>> entry : output_groupings.entrySet()) {
              String stream_id = entry.getKey();
              Map<String, Grouping> component_grouping = entry.getValue();
  
              Fields out_fields = topology_context.getThisOutputFields(stream_id);
  
              Map<String, MkGrouper> componentGrouper = new HashMap<>();
              for (Entry<String, Grouping> cg : component_grouping.entrySet()) {
                  String component = cg.getKey();
                  Grouping tgrouping = cg.getValue();
  
                  List<Integer> outTasks = topology_context.getComponentTasks(component);
                  // ATTENTION: If topology set one component parallelism as 0
                  // so we don't need send tuple to it
                  if (outTasks.size() > 0) {
                      MkGrouper grouper = new MkGrouper(
                              topology_context, out_fields, tgrouping, component, stream_id, workerData);
                      componentGrouper.put(component, grouper);
                  }
                  LOG.info("outbound_components, {}-{} for task-{} on {}",
                          component, outTasks, topology_context.getThisTaskId(), stream_id);
              }
              if (componentGrouper.size() > 0) {
                  rr.put(stream_id, componentGrouper);
              }
          }
          return rr;
      }
docs: get current task's output <Stream_id, <componentId, MkGrouper>>