作为Apach下一个优秀的开源消息队列框架,Kafka已经成为很多互联网厂商日志采集处理的第一选择。后面在实际应用场景中可能会应用到,因此就先了解了一下。经过两个晚上的努力,总算是能够基本使用。
操作系统:虚拟机Centos 6.5
1、下载Kafka安装文件,首先进入官网,找到最新的稳定版本
wget http://mirrors.hust.edu.cn/apache/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz
2、解压并拷贝到 需要的目录下,我的设定为 /usr/下
先 cp 然后解压 tar -xzvf
3、由于我本机已经安装了zookeeper,因此直接修改server.properties 文件

4、启动服务 bin/kafka-server-start.sh config/server.properties ,问题来了 :
 

两个消费端均能收到服务端的信息。
7、尝试用java代码来接收信息,首先建立一个MAVEN工程,POM.xml文件加入依赖:
 <dependency>
		<groupId>org.apache.kafka</groupId>
		<artifactId>kafka-clients</artifactId>
		<version>0.8.2.1</version>
	</dependency>
	<dependency>
		<groupId>org.apache.kafka</groupId>
		<artifactId>kafka_2.11</artifactId>
		<version>0.8.2.1</version>
	</dependency>  
  
然后运行安装代码构建完成。具体调用代码如下
import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;
import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.consumer.Whitelist;
import kafka.javaapi.consumer.ConsumerConnector;
import kafka.message.MessageAndMetadata;
import org.apache.kafka.common.utils.CollectionUtils;
/** 
 * File Name:KafkaConsumer.java 
 * Package_Name:kafkaTest 
 * date:2017-3-25上午10:00:56 
 * Author : cao.zhi10 
 * 
 */
public class KafkaConsumer {
	    public static void main(String[] args) throws Exception {
	    	  Properties properties = new Properties();  
	    	    properties.put("zookeeper.connect", "192.168.118.131:3181");  
	    	    properties.put("auto.commit.enable", "true");  
	    	    properties.put("auto.commit.interval.ms", "60000");  
	    	    properties.put("group.id", "test");  
	    	   
	    	    ConsumerConfig consumerConfig = new ConsumerConfig(properties);  
	    	   
	    	    ConsumerConnector javaConsumerConnector = Consumer.createJavaConsumerConnector(consumerConfig);  
	    	   
	    	    //topic的过滤器  
	    	    Whitelist whitelist = new Whitelist("test");  
	    	    List<KafkaStream<byte[], byte[]>> partitions = javaConsumerConnector.createMessageStreamsByFilter(whitelist);  
	    	   
	    	    if (partitions==null) {  
	    	      System.out.println("empty!");  
	    	      TimeUnit.SECONDS.sleep(1);  
	    	    }  
	    	   
	    	    //消费消息  
	    	    for (KafkaStream<byte[], byte[]> partition : partitions) {  
	    	   
	    	      ConsumerIterator<byte[], byte[]> iterator = partition.iterator();  
	    	      while (iterator.hasNext()) {  
	    	        MessageAndMetadata<byte[], byte[]> next = iterator.next();  
	    	        System.out.println("partiton:" + next.partition());  
	    	        System.out.println("offset:" + next.offset());  
	    	        System.out.println("接收到message:" + new String(next.message(), "utf-8"));  
	    	      }  
	    	    }   
	    }
}
执行main方法,一直报DISCONNECT异常,仔细分析启动日志发现一直在去尝试调用 localhost:9092 。搜索了下该问题,网上给的解决方案是修改 service.properties 里面的hostname 信息,但是目前最新版本已经取消了该节点,目前必须使用 listeners.

8、重新启动服务,生产者,消费者(注意必须用IP地址启动,否则会报错)
 
 
 
问题得到解决


初识Kafka----------Centos上单机部署、服务启动、JAVA客户端调用
原文:http://www.cnblogs.com/snowballed/p/6619078.html