初识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

扫描二维码关注公众号,回复: 77778 查看本文章

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());
            }
        }
    }
}

运行结果

猜你喜欢

转载自www.cnblogs.com/gree/p/8961063.html