code: public List<FlowEvent> getFlowEventsSince(FlowEventKey lastSeen)
        throws IOException {
      // rows must match the FlowKey portion + SEP
      byte[] keyPrefix =
          Bytes.add(flowKeyConverter.toBytes(lastSeen), Constants.SEP_BYTES);
      // start at the next following sequence number
      FlowEventKey nextEvent = new FlowEventKey(lastSeen.getCluster(),
          lastSeen.getUserName(), lastSeen.getAppId(), lastSeen.getRunId(),
          lastSeen.getSequence() + 1);
      byte[] startKey = keyConverter.toBytes(nextEvent);
      Scan scan = new Scan(startKey);
      scan.setFilter(new WhileMatchFilter(new PrefixFilter(keyPrefix)));
  
      List<FlowEvent> results = new ArrayList<FlowEvent>();
      ResultScanner scanner = null;
      Table eventTable = null;
      try {
        eventTable = hbaseConnection
            .getTable(TableName.valueOf(Constants.FLOW_EVENT_TABLE));
        scanner = eventTable.getScanner(scan);
        for (Result r : scanner) {
          FlowEvent event = createEventFromResult(r);
          if (event != null) {
            results.add(event);
          }
        }
      } finally {
        try {
          if (scanner != null) {
            scanner.close();
          }
        } finally {
          if (eventTable != null) {
            eventTable.close();
          }
        }
      }
      return results;
    }
docs: Retrieves all events added after the given event key (with sequence numbers
  greater than the given key). If no new events are found returns an empty
  list.
  @param lastSeen
  @return