2014-01-27 2 views
6

대용량 실시간 자바 웹 앱에서 나는 apache kafka에게 메시지를 보내고 있습니다. 현재 하나의 주제로 보내고 있지만 나중에 여러 주제로 메시지를 보내야 할 수도 있습니다.카프카에서 만드는 제작자는 몇 명입니까?

이 경우 필자는 주제별 제작자를 생성 할 날씨가 좋지 않거나 모든 주제에 대해 단일 제작자를 사용해야합니까? 당신이 볼 수 있듯이

props = new Properties(); 
props.put("zk.connect", <zk-ip1>:<2181>,<zk-ip3>:<2181>,<zk-ip3>:<2181>); 
props.put("zk.connectiontimeout.ms", "1000000"); 
props.put("producer.type", "async"); 

Producer<String, Message> producer = new kafka.javaapi.producer.Producer<String, Message>(new ProducerConfig(props)); 

ProducerData<String, Message> producerData1 = new ProducerData<String, Message>("someTopic1", messageTosend); 
ProducerData<String, Message> producerData2 = new ProducerData<String, Message>("someTopic2", messageTosend); 

producer.send(producerData1); 
producer.send(producerData2); 

는, 생산자가 생성되면 내가 다른 주제로 데이터를 전송하는 데 사용할 수 있습니다 :

여기 내 코드입니다. 모범 사례가 무엇인지 궁금합니다. 내 앱이 여러 주제로 전송되는 경우 (각 주제마다 다른 데이터가 표시됨) 하나의 제작자를 사용할 수 있습니까? 아니면 여러 개의 제작자를 만들어야합니까? (일반적으로 말하면) 한 명 이상의 제작자를 사용해야합니까?

답변

6

일반적으로 모든 주제의 단일 제작자가 네트워크 효율성이 향상됩니다.

kafka 클라이언트가 동일한 카프카 노드에서 하나 이상의 주제 + 파티션을 보는 경우, 하나의 메시지에서 두 주제 + 파티션 모두에 대한 메시지를 보낼 수 있습니다. 카프카는 메시지 배치를 최적화하여 효율적입니다.

또한 웹 서버는 제작자 당 하나의 노드 당 하나의 연결 대신 각 카프카 노드에 최대 하나의 tcp 연결 만 유지하면됩니다. 당신이 의견에 언급 된 바와 같이 https://kafka.apache.org/documentation.html#design

은 잠금 경합이, YMMV 제한 요인이 될 수 있습니다 : 카프카의 디자인에 대한 추가 정보를 원하시면

.

1

실제로 하나의 제작자 만이 주제마다 최적이라는 것을 확인했습니다. 그러나 길고 뚱뚱한 네트워크 문제가 발생하는 경우 여러 제작자를 갖는 것이 유용합니다.이 경우 네트워크를 완전히 활용하려면 여러 개의 연결이 필요합니다.

커다란 창 크기로 TCP 조정을 수행하지 않으면 멀리 떨어진 호스트에 보내야하는 경우 단일 TCP 연결 (Kafka에서 사용됨)에서 일괄 처리 및 파이프 라이닝만으로 큰 배치로 확장되지 않습니다. 이는 더 많은 제작자를 시험해 볼 수있는 경우입니다.

0

0.8.2.0 이상에서 여러 항목에 대해 동일한 kafka 제작자를 사용하는 경우 라운드 로빈 할당을위한 기본 Partitioner 논리가 실패합니다.

0

Kafka: The Definitive Guide에서, 카프카 생산자 장에서 저자는 말한다 :

당신은 아마 하나 개의 생산자와 하나 개의 스레드로 시작하는 것이 좋습니다. 더 나은 처리량이 필요한 경우 같은 제작자를 사용하는 스레드를 더 추가 할 수 있습니다. 처리량이 증가하지 않으면 더 많은 처리량을 얻기 위해 더 많은 프로듀서를 응용 프로그램에 추가 할 수 있습니다.

따라서 여러 제작자가 실제로 도움이 될 수 있습니다.

관련 문제