나는이 질문을하기 전에 여기에서 물었다는 것을 알고있다 : Kafka Streaming Concurrency?카프카 스트림 프로세서 스레드는 안전합니까?
그러나 이것은 나에게 매우 이상하다. 문서 (또는 어쩌면 내가 뭔가 놓치고있다)에 따르면 각 파티션은 프로세서의 다른 인스턴스를 의미하는 작업을 가지고 있으며 각 작업은 다른 스레드에 의해 실행 중이다. 하지만 테스트했을 때, 다른 스레드가 프로세서의 다른 인스턴스를 얻을 수 있다는 것을 알았습니다. 따라서 프로세서의 메모리 상태 (예전 방식)를 유지하려면 잠 가야합니까?
예 번호 :
public class SomeProcessor extends AbstractProcessor<String, JsonObject> {
private final String ID = UUID.randomUUID().toString();
@Override
public void process(String key, JsonObject value) {
System.out.println("Thread id: " + Thread.currentThread().getId() +" ID: " + ID);
OUTPUT :
스레드 ID : 88 ID : 26b11094-a094-404b-b610-88b38cc9d1ef
스레드 ID : 88 ID : c667e669 -9023-494b-9345-236777e9dfda
스레드 ID : 88 ID : c667e669-9023-494b-934 5-236777e9dfda
스레드 ID : 90 ID : 0a43ecb0-26f2-440d-88e2-87e0c9cc4927
스레드 ID : 90 ID : c667e669-9023-494b-9345-236777e9dfda
스레드 ID : ID 90 : c667e669-9023-494b-9345-236777e9dfda
인스턴스마다 스레드를 적용 할 수있는 방법이 있습니까?
@ matthias-j-sax에 대한 답장을 보내 주셔서 감사합니다.사실 그 옵션을 알고있었습니다. 문제는 내가 스트림을 "스레드 안전하지 않음"으로 쓰지 않고 나쁜 실례이기 때문에 하나의 스레드를 사용하도록 강요한다는 것입니다. 나는 Kafka 스트림이 AKKA 배우 패턴과 유사한 API/문장 부호 API에서 "스레드 안전성"을 지원한다고 가정했습니다. 그러나 나는 틀렸다고 생각한다. 어쨌든 이제는 구식 잠금을 사용하는 것 외에는 아무것도 없다는 것을 이해합니다. 다시 한 번 감사드립니다. –