初识kafka
一、安装单机版zookeeper
注:可使用单机版zookeeper也可使用kafka自带zookeeper
下载地址:http://archive.apache.org/dist/zookeeper/
下载版本:zookeeper-3.4.5.tar.gz
1、解压到 /usr/local/zookeeper 中
tar -zxf zookeeper-3.4.5.tar.gz /usr/local/zookeeper
2、新建文件夹
在主目录下创建data和logs两个文件夹用于存放数据和日志
cd /usr/local/zookeeper/zookeeper-3.4.5
mkdir data
mkdir logs
3、配置信息
在conf文件夹下创建zoo.cfg文件,并将以下内容写入
tickTime=2000
dataDir=/usr/local/zookeeper/zookeeper-3.4.5/data
dataLogDir=/usr/local/zookeeper/zookeeper-3.4.5/logs
clientPort=2181
4、启动zookeeper
cd /usr/local/zookeeper/zookeeper-3.4.5/bin
./zookeeper.sh start
二、安装kafka
默认前提:机器已安装好jdk
下载使用kafka版本
下载地址: http://kafka.apache.org/downloads
下载版本:kafka_2.11-1.1.0.tgz
解压到/usr/local/kafka中
tar -zxf kafka_2.11-1.1.0.tgz /usr/local/kafka
三、使用kafka
在kafka解压目录下有一个config文件夹,里面存放配置文件,这里的配置使用默认配置,若要修改配置信息,进入该目录找到对应文件修改即可
例如:修改zookeeper数据存放的位置
在config目录下找到zookeeper.properties 文件
vim zookeeper.properties
如下图,修改dataDir=自行设置的路径
1、常规设置:
(1)brocker.id
默认值是0,也可以设置成任意整数,但在kafka集群中必须是唯一的。
(2)port
port配置参数可设置成任意可用端口,但使用1024以下端口时,需要使用root权限启动kafka
(3)zookeeper.connect
指定用于broker元数据的zookeeper地址 localhost:2181表示zookeeper是运行在本地的2181端口上。
该配置参数形式:hostname:port/path
hostname: zookeeper服务器的机器名或IP地址
port: zookeeper的客户端连接端口
/path是可选的zookeeper路径,若不指定,默认使用根路径,若指定路径不存在,broker在启动时会自动创建。
2、启动
进入kafka解压目录
cd /usr/local/kafka/kafka_2.11-1.1.0
启动zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
启动kafka
bin/kafka-server-start.sh config/server.properties
创建topic(name:testaha)
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication -factor 1 --partitions 1 --topic testaha
查看已创建的topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
注:--zookeeper<string,hosts> 在这里的含义string :localhost hosts:2181
创建一个消费者
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testaha --from-beginning
创建一个生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic testaha
查看topic的相关信息
bin/kafka-topics.sh --zookeeper localhost:2181 --topic testaha --describe
注:Leader:负责处理消息的读和写,它是从所有节点中随机选择的
Replicas:列出了所有的副本节点,不管节点是否在服务中
Isr:正在服务中的节点
四、Java程序使用kafka
1、添加所需要的依赖
打开pom.xml文件,添加以下代码
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.10</artifactId>
<version>0.10.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.10.2.1</version>
</dependency>
2、简单版生产者,消费者的实现
注:在运行Java代码之前保证zookeeper和kafka处于已启动状态
生产者
public class create_topic { public static void main(String [] args){ /*新建一个Properties对象*/ Properties kafkaProps = new Properties(); /*三个必须设置的属性*/ kafkaProps.put("bootstrap.servers","localhost:9092"); kafkaProps.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer"); kafkaProps.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer"); /*将Properties对象传给producer对象*/ Producer <String,String> producer =new KafkaProducer<String, String>(kafkaProps); /*发送消息到kafka*/ try { int i=0; while(true) { producer.send(new ProducerRecord<String,String>("blue","sky","cloud"+i+"")); } }catch (Exception e){ e.printStackTrace(); }finally { producer.close(); } } }
消费者
public class create_consumer { public static void main(String [] args){ /*创建Properties对象*/ Properties props=new Properties(); /*三个必须设置的属性 group.id可选择设置*/ props.put("bootstrap.servers","localhost:9092"); props.put("group.id","black"); props.put("key.serializer","org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer","org.apache.kafka.common.serialization.StringSerializer"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); /*创建消费者*/ KafkaConsumer<String,String> consumer=new KafkaConsumer<>(props); /*订阅主题*/ consumer.subscribe(Collections.singletonList("blue")); while(true){ /*向服务器请求数据*/ ConsumerRecords<String,String> records=consumer.poll(1000); for(ConsumerRecord<String,String> record:records){ System.out.println(record.key()+"---"+record.topic()+"----"+record.value()); } } } }
运行结果