2014-12-20 6 views
7

소비자가 메시지를 읽고 스레드가 메시지를 다른 항목으로 생성하기 전에 데이터베이스 액세스를 포함하여 여러 가지 작업을 수행하는 응용 프로그램이 있습니다. 스레드에서 메시지를 소비하고 생성하는 시간은 몇 분이 소요될 수 있습니다. 메시지가 새로운 주제로 생성되면 커밋이 완료되어 소비자 대기열 메시지에 대한 작업이 완료되었음을 나타냅니다. 자동 커밋이 비활성화되어 있습니다.kafka 소비자 세션 타임 아웃

저는 높은 수준의 소비자를 사용하고 있으며, 사육사가 소비자 대기열에서 작업하기 전에 너무 오래 걸리기 때문에 사육사와 카프카 세션 시간 초과가 발생하므로 kafka는 스레드가 다시 돌아올 때마다 다시 균형을 조정합니다. 소비자 대기열에서 더 많은 내용을 읽으십시오. 소비자가 잠시 후 새로운 메시지를 읽기 전에 오랜 시간이 걸리기 시작합니다.

나는 사육자 세션 제한 시간을 매우 높게 설정하여 문제가 발생하지 않도록 조정할 수 있지만 그에 따라 균형 매개 변수를 조정해야하며 kafka는 다른 부작용 중 새로운 소비자를 선택하지 않습니다.

이 문제를 해결하기위한 나의 대안은 무엇입니까? 카프카와 사육사에게 기쁜 마음으로 둘 다 행복하게 할 수있는 방법이 있습니까? 간단한 소비자를 사용하는 경우에도 여전히 동일한 문제가 있습니까?

+0

문제를 설명하면 도움을 얻을 가능성이 더 큽니다. "의견을 얻고 싶습니다"라고 대답하면 질문이 닫힐 수 있습니다. 스택 오버플로는 포럼이 아닙니다. 우리는 간결하고 유익한 것을 중요하게 생각합니다. –

답변

3

마지막 읽기 오프셋을 관리하기 위해 상위 수준 소비자에게 의존하는 것처럼 느껴지 듯 들립니다. 간단한 소비자를 사용하면 오프셋의 지속성을 제어하기 때문에 문제를 해결할 수 있습니다. 고차원 소비자 커밋은 모두 사육사에서 마지막으로 읽은 오프셋을 저장한다는 점에 유의하십시오. 다른 조치는 없으며 방금 읽은 메시지는 여전히 파티션에 있으며 다른 소비자가 읽을 수 있습니다.

kafka 단순 소비자의 경우 오프셋 저장이 수행되는시기와 방법을 훨씬 효과적으로 제어 할 수 있습니다. 심지어 Zookeeper (예를 들어, 데이터베이스)와는 다른 곳에 오프셋을 유지할 수도 있습니다.

나쁜 소식은 단순한 소비자는 상위 소비자보다 단순하지만 실제로 작동시키기 위해서는 코드별로해야 할 일이 많이 있다는 것입니다. 또한 여러 파티션에 액세스 할 수있는 코드를 작성해야합니다. 상위 수준의 소비자가 당신을 위해 아주 잘하는 것입니다.

+0

안녕하세요, 저는 같은 문제에 직면하고 있지만 새로운 카프카 버전에서는 간단한 소비자가 가치가 떨어집니다. 그것을 지금하는 방법? – pg20

0

저는 소비자의 투표 방법이 소비자의 심장 박동 요청을 유발한다고 생각합니다. 그리고 session.timeout을 늘릴 때. 소비자의 박동은 코디네이터에게 전달되지 않습니다. 이 하트 비트가 건너 뛰기 때문에 코디네이터는 소비자 사망을 표시합니다. 또한 소비자 재결합은 특히 단일 소비자의 경우 매우 느립니다.

나는 유사한 문제와 I 소비자 구성 속성에서 다음 매개 변수를 변경해야 할 것을 해결하기를 직면

session.timeout.ms = request.timeout.ms =

또한 세션 시간 제한보다 더 kafka 브로커 노드의 server.properties에 다음과 같은 속성을 추가해야합니다. group.max.session.timeout.ms =

자세한 내용은 다음 링크를 참조하십시오. http://grokbase.com/t/kafka/users/16324waa50/session-timeout-ms-limit