我的水槽配置
agent.sinks.sink.batchSize=10
哪个水槽过程10 reacords at each batch
,我得到所有记录的同一时间。
因此,可以通过批量为每条记录获取不同的时间。
答案 0 :(得分:0)
您是否使用timestamp interceptor来设置时间戳?
让我们来看看source code:
/**
* 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代码编写自己的拦截器,该代码会将批处理事件的数量附加到时间戳。但是,它不能保证全局唯一性的标识符,因为有可能在一毫秒内处理两个批次。
请提供更具体的建议,澄清您的要求。
答案 1 :(得分:0)
其他选项是通过在生成时设置timestamp标头或通过解析字符串并设置时间戳来确定事件的时间戳是正确的。