2016-11-08 2 views
2

카프카를 사용하여 로그 이벤트를 처리하고 있습니다. 나는 간단한 커넥터와 스트림 변환을위한 Kafka Connect와 Kafka Streams에 대한 기본적인 지식을 가지고 있습니다.Kafka는 결합 된 로그 이벤트에 단일 로그 이벤트 라인을 집계합니다.

이제 I는 다음과 같은 구조의 로그 파일을 가지고

timestamp event_id event 

로그의 이벤트 EVENT_ID로 연결된 복수의 기록 라인 (예를 들면 메일 로그)

예 가지고

Examp :

1234 1 START 
1235 1 INFO1 
1236 1 INFO2 
1237 1 END 

그리고 일반적으로 는 여러 개의 이벤트가 있습니다 le :

1234 1 START 
1234 2 START 
1235 1 INFO1 
1236 1 INFO2 
1236 2 INFO3 
1237 1 END 
1237 2 END 

시간 창 (START와 END 사이)은 최대 5 분이 될 수 있습니다.

은 결과적으로 내가 원하는

event_id combined_log 

예와 같은 주제 :

1 START,INFO1,INFO2,END 
2 START,INFO2,END 

이를 달성 할 수있는 적절한 도구가 무엇입니까? 나는 카프카 스트림으로 그것을 풀려고했지만 어떻게 생각해 낼 수 있습니다.

답변

2

당신은 본질적으로 메시지 페이로드를 기반으로 세션이나 트랜잭션을 재구성하고 있습니다. 현재로서는 이러한 기능에 대한 기본 제공, 즉시 사용할 수있는 지원이 없습니다. 그러나 Kafka의 Streams API의 Processor API 부분을 사용하여이 기능을 직접 구현할 수 있습니다. 상태 저장소를 사용하는 사용자 지정 프로세서를 작성하여 주어진 키에 대해 세션/트랜잭션이 시작, 추가 및 종료되는 시점을 추적 할 수 있습니다.

내가 당신을 가리킬 수있는 기존 코드 예제를 모르지만 메일 링리스트의 일부 사용자가 해당 IIRC를 수행하고 있습니다.

주의해야 할 점은 순서가 잘못된 데이터를 올바르게 처리하는 것입니다.

하지만 실제로
1234 1 START 
1234 2 START 
1235 1 INFO1 
1236 1 INFO2 
1236 2 INFO3 
1237 1 END 
1237 2 END 

는 메시지/기록이 밖으로의 순서과 같이 (I 만 예를 단순화하기 위해 키 1와 메시지를 표시)에 도착 할 수 있습니다 : 귀하의 예제에서는 적절한 순서로 모든 입력 데이터를 나열 위 : START -> INFO1 -> INFO2 -> END보다는 START -> END (/ 무시 INFO1INFO2 = 데이터 손실 삭제) 또는 START -> END -> INFO2 -> INFO1 (잘못된 순서 : 그렇게하더라도

1234 1 START 
1237 1 END 
1236 1 INFO2 
1235 1 INFO1 

, 내가 사용 사례에 당신은 여전히이 데이터를 해석 할 것을 이해 아마도 의미 론적 제약을 위반할 수도 있습니다).

+0

답변 주셔서 감사합니다. 프로세서 API를 살펴 보겠습니다. 주문 문제도 고려해야합니다. – imehl

+1

프로세서 API가 해결책입니다 - 다시 한 번 감사드립니다! – imehl

+0

@imehl : 어쩌면 해결책을 찾았을 때 실제로 문제를 해결하기 위해 한 일에 대한 정보로 위의 질문을 업데이트하고 싶습니까? –