0

我的水槽配置是

agent.sinks.sink.batchSize=10

哪个水槽过程10 reacords at each batch,我得到所有记录的相同时间。

因此,有可能批量获得每条记录的不同时间。

4

2 回答 2

0

其他选项是正确获取事件的时间戳 - 通过在生成时设置时间戳标头或通过解析字符串并以这种方式设置时间戳。

于 2013-06-14T18:23:13.157 回答
0

您是否使用时间戳拦截器来设置时间戳?

让我们看一下它的源代码

  /**
   * Modifies events in-place.
   */
  @Override
  public Event intercept(Event event) {
    Map<String, String> headers = event.getHeaders();
    if (preserveExisting && headers.containsKey(TIMESTAMP)) {
      // we must preserve the existing timestamp
    } else {
      long now = System.currentTimeMillis();
      headers.put(TIMESTAMP, Long.toString(now));
    }
    return event;
  }

  /**
   * Delegates to {@link #intercept(Event)} in a loop.
   * @param events
   * @return
   */
  @Override
  public List<Event> intercept(List<Event> events) {
    for (Event event : events) {
      intercept(event);
    }
    return events;
  }

我想方法的执行时间intercept(List<Event> events)是如此之短,以至于批处理中的所有事件都在一毫秒内处理完毕。因此,无法使用此拦截器为批量事件强制使用不同的时间戳。

如果您需要批量为每个事件提供唯一标识符,您可以根据 TimestampInterceptor 代码编写自己的拦截器,它将批量事件的数量附加到时间戳。但是,它不能保证意向器的全局唯一性,因为有可能在一毫秒内处理两个批次。

如需更具体的建议,请澄清您的要求。

于 2013-06-14T12:28:39.120 回答