0

메신저 카프카 작업 첫번째 초에 메시지를 생성하는 속도가 느린이며, 나는 그런 프로듀서 만든 : 당신이 매우 간단 볼 수카프카는

synchronized (obj) { 

     while (true){ 

      long start = Instant.now().toEpochMilli(); 
      for (int i=0; i< NUM_MSG_SEC ; i++) 
      { 

       PriceStreamingData data = PriceStreamingData.newBuilder() 
         .setUser(getRequest().getUser()) 
         .setSecurity(getRequest().getSecurity()) 
         .setTimestamp(Instant.now().toEpochMilli()) 
         .setPrice(new Random().nextDouble()*200) 
         .build(); 


       record = new ProducerRecord<>(topic, keyBuilder.build(data), 
         data); 



       producer.send(record,new Callback(){ 
        @Override 
        public void onCompletion(RecordMetadata arg0, Exception arg1) { 
         counter.incrementAndGet(); 
         if(arg1 != null){ 
          arg1.printStackTrace(); 
         } 


        } 
       }); 

      } 
      long diffCiclo = Instant.now().toEpochMilli() - start; 
      long diff = Instant.now().toEpochMilli() - startTime; 


      System.out.println("Number of sent: " + counter.get() + 
        " Millisecond:" + (diff) + " - NumberOfSent/Diff(K): " + counter.get()/diff); 

      try { 
       if(diffCiclo >= 1000){ 
        System.out.println("over 1 second: " + diffCiclo); 

       } 
       else { 
        obj.wait(1000 - diffCiclo); 

       } 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 




     } 
    } 

, 그냥 새 메시지를 만들어 보낼를 . 내가 로그가 표시되는 경우 : 처음 10 초

NumberOfSent/Diff(K) 

을 내가

180k per second 

이유

이 단지

30k per second 

60 초 동안 아주 나쁜 수행? 그리고 이미 180k로 진행중인 프로세스를 시작할 수 있습니까?

내 카프카 프로듀서 구성은 follwing을

Async producer (but also with sync producer the situation dose not change) 
    ACKS_CONFIG = 0 
    BATCH_SIZE_CONFIG = 20000 
    COMPRESSION_TYPE_CONFIG = none 
    LINGER_MS_CONFIG = 0 

입니다 마지막 세부 :

NUM_MSG_SEC is set to 200000 or bigger number 
+0

'obj'에 지연을 초래하는 잠금 장치가 있습니까? isRunning()이 true를 반환하는 경우는 언제입니까? –

+0

아무 것도 obj에 아무것도 잠그지 않습니다. 지연은 지연을 일으키는 원인이 될 수 있습니다. 지연은 어딘가에 있지만 내 코드 안에 있지 않습니다. 내 코드는 매우 간단합니다. 카프카 설정과 관련이 있다고 생각합니다. (isRunning은 항상 true입니다.) –

+0

아마도'synchronized (obj)'바로 뒤에 log 문을 추가하여 코드가 실제로 실행 된시기를 결정하십시오. 코드가 실행되기 전에 무슨 일이 벌어지고 있는지보기 위해 디버그에서도 실행될 수 있습니다. –

답변

0

내가 나 자신에 의해 해결책을 발견하고 나는이 게시물이 너무 다른 사람들을 위해 도움이 될 수 있기를 바랍니다.

ProducerConfig.BATCH_SIZE_CONFIG 

ProducerConfig.LINGER_MS_CONFIG 

내 매개 변수의 문제 스탠드 20000이었고, 0은 문제를 해결하기 위해 나는 마지막으로 200,000에서 1000 값 이상으로 그들에게 그들을 설정 않았다 매개 변수를 사용하여 JVM을 시작했습니다.

-XX:MinMetaspaceFreeRatio=100 
-XX:MaxMetaspaceFreeRatio=100 

메타 스페이스를 적절한 값으로

이제 생산자는 140k에서 직접 시작하고 1 초에서 이미 180k로 시작합니다.