kafka测试同一个消费组的多个消费者负载均衡实例(集成spring)

这里使用的是zookeeper和kafka3台机器的集群,这样能保证如过有一台机器炸了还能运行,在集群环境中,要在kafka的 server.properties中配置zookeeper集群地址等信息,消息设置三个分区,这样一个分区由一个机器管,所以当kafka发消息的时候就会发送到每个机器上。

如果是一个机器的话,就算多个分区数,那么日志文件还是会存放到一台机器上,还是能让消息实现分区保存。

虽然说这样依旧能实现多消费者的负载均衡(那所有消费者都是从收到消息的这台机器上拉取消息),但是集群设置有一个特点:容错性;这种情况在这台机器炸了之后就没办法运行了,更别说负载均衡了。

中央配置文件:



  
    
      
        classpath:config.properties
      
    
  
  
  
  

消费者1:





  
  
    
      
        
        
        
        
        
        
        
      
    
  

  
  

  
  
    
    
  

  
    
    
  


消费者2:一模一样的配置,只是消费者处理类换了;





  
  
    
      
        
        
        
        
        
        
        
      
    
  

  
  

  
  
    
    
  

  
    
    
  


处理类则是简单的输出收到的消息:

package cn.wzy;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.listener.MessageListener;

public class JobConsumer1 implements MessageListener {

  public void onMessage(ConsumerRecord record) {
    System.out.println("==JobConsumer1 received:" + record.key() + " : " + record.value());
  }


}
package cn.wzy;

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.springframework.kafka.listener.MessageListener;

public class JobConsumer2 implements MessageListener {

  public void onMessage(ConsumerRecord record) {
    System.out.println("==JobConsumer2 received:" + record.key() + " : " + record.value());
  }


}

生产者:




  
  
    
      
        
        
        
        
        
        
        
        
      
    
  
  
  
  
  
    
    
    
    
  

bootstrap.servers=192.168.60.131:9092,192.168.60.132:9092,192.168.60.133:9092

测试类:

package cn.wzy;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.Random;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:application.xml")
public class SendTest {


  @Autowired
  private KafkaTemplate kafkaTemplate;

  @Test
  public void test() throws InterruptedException {
    for (long i = 1; i < 50; i++) {
      kafkaTemplate.sendDefault(i,"message : hello world");
    }
    Thread.sleep(5000);
  }
}

结果:

kafka测试同一个消费组的多个消费者负载均衡实例(集成spring)_第1张图片

你可能感兴趣的:(分布式)