@Override
 public void toAcked(String tag) throws IOException {
   // TODO tag에 해당되는 파일 오프셋을 갱신?
   // TODO 파일에 내리는 것은 다른 쓰레드가 하는게 좋겠지?
   log.info("toAcked : " + tag);
   for (CheckpointData data : pending) {
     if (data.tag.equals(tag)) {
       data.setAcked(true);
     }
   }
 }
 @Override
 public void retry(String tag) throws IOException {
   // TODO 실패하면 리커버를 해야 한다.
   log.info("retry : " + tag);
   for (CheckpointData data : pending) {
     if (data.tag.equals(tag)) {
       data.setAcked(false);
       break;
     }
   }
   mergeAndWrite();
   try {
     recover();
   } catch (InterruptedException e) {
     e.printStackTrace(); // TODO 예외 처리
   } catch (RuntimeException e) {
     e.printStackTrace();
   } catch (FlumeSpecException e) {
     e.printStackTrace();
   }
 }