kafka学习笔记

一、集群安装

1、解压

 

2、修改/home/hadoop/app/kafka_2.10-0.8.1.1/config/server.properties

broker.id=1     //每一台节点的这个参数会不同,这是每一台节点的id

zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181

 

3、将zookeeper集群启动

 

4、在每一台节点上启动broker

bin/kafka-server-start.sh config/server.properties

 

5、在kafka集群中创建一个topic

bin/kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 3 --partitions 1 --topic order

 

6、用一个producer向某一个topic中写入消息

bin/kafka-console-producer.sh --broker-list hadoop02:9092 --topic order

 

7、用一个comsumer从某一个topic中读取信息

bin/kafka-console-consumer.sh --zookeeper hadoop03:2181 --from-beginning --topic order

 

8、查看一个topic的分区及副本状态信息

bin/kafka-topics.sh --describe --zookeeper hadoop01:2181 --topic order

 

二、kafka学习笔记

1. kafka是一个分布式的消息缓存系统

 

2. kafka集群中的服务器都叫做broker

 

3. kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接

 

4. kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载

 

5. 每一个分区都可以有多个副本,以防止数据的丢失

 

6. 某一个分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新

 

7. 消费者可以分组,比如有两个消费者组A和B,共同消费一个topic:order_info,A和B所消费的消息不会重复比如 order_info 中有100个消息,每个消息有一个id,编号从0-99,那么,如果A组消费0-49号,B组就消费50-99号

 

8. 消费者在具体消费某个topic中的消息时,可以指定起始偏移量

 

三、kafka调用javaAPI

 

 1. 生产者(producer)

 

 

package com.kafka;

import java.util.Properties;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;

public class ProducerDemo {
	public static void main(String[] args) throws Exception {
		Properties props = new Properties();
		props.put("zk.connect", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		props.put("metadata.broker.list","hadoop01:9092,hadoop02:9092,hadoop03:9092");
		props.put("serializer.class", "kafka.serializer.StringEncoder");
		
		
		ProducerConfig config = new ProducerConfig(props);
		Producer<String, String> producer = new Producer<String, String>(config);

		for (int i = 1; i <= 100; i++) {
			Thread.sleep(500);
			producer.send(new KeyedMessage<String, String>("wordcount","This is "+i+" message"));
		}
		
	}
}
 
2. 消费者(consumer)
package com.kafka;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector;
import kafka.message.MessageAndMetadata;

public class ConsumerDemo {
	public static void main(String[] args) {
		Properties props = new Properties();
		props.put("zookeeper.connect", "hadoop01:2181,hadoop02:2181,hadoop03:2181");
		props.put("group.id", "1111");
		props.put("auto.offset.reset", "smallest");

		ConsumerConfig config = new ConsumerConfig(props);
		ConsumerConnector consumer =Consumer.createJavaConsumerConnector(config);
		
		Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
		topicCountMap.put("wordcount", 1);
		
		Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
		List<KafkaStream<byte[], byte[]>> streams = consumerMap.get("wordcount");
		
		for(final KafkaStream<byte[], byte[]> kafkaStream : streams){
			new Thread(new Runnable() {
				@Override
				public void run() {
					for(MessageAndMetadata<byte[], byte[]> mm : kafkaStream){
						String msg = new String(mm.message());
						System.out.println(msg);
					}
				}
			
			}).start();
		
		}
	}
}
 

 

你可能感兴趣的:(kafka学习笔记)