一、单机部署

1.下载kafka,可在apache官网上下载,kafka要和JDK版本对应,我使用的是JDK1.7,kafka为0.10

2.进入到 /usr/java 中,解压到 此文件夹中

  tar -zxvf kafka_2.12-0.10.2.0.tgz

3. 因为kafka是通过Zookeeper来集群的,所以先开启Zookeeper集群(当然开启一个Zookeeper也可以),此处用了3个Zookeeper实现了伪集群,集群的方法见此处

4.修改kafka的 /usr/java/kafka_2.12-0.10.2.0/config/server.properties 配置文件,配置Zookeeper的地址,将zookeeper.connect 的值改为:

  zookeeper.connect=192.168.80.128:2181,192.168.80.128:2182,192.168.80.128:2183

5.启动kafka,进入到kafka的 bin 目录,需要指定启动的配置文件。

  启动(以后台方式启动): ./kafka-server-start.sh  -daemon  ../config/server.properties

  在Zookeeper中查看节点:ls / ,发现多个很多节点

  

  由此,kafka 已经启动成功了,启动成功之后 kafka 会暴露一个 9092的端口。

6.创建一个topic

  ./kafka-topics.sh --create --zookeeper localhost:2181,localhost:2182,localhost:2183  --replication-factor 1 --partition 2 --topic TestTopic

  解析:create 为 创建一个topic;

       zookeeper 为 指定的zookeeper的地址和端口;

       replication-factor 为 topic要在 不同的 broke中保存几分,因为此处没有做集群,则只有一个broker;

            partition 为 分区;

       topic 为 创建的topic的名字;

7.查看创建的topic

  命令行方式:./kafka-topics.sh --list --zookeeper localhost:2181,localhost:2182,localhost:2183

  

  在Zookeeper中查看:ls  /brokers/topics

  

  所有的消息都死通过Zookeeper管理的,不论是发送还是消费。

8.启动消费者,监听6中创建的topic:TestTopic

  ./kafka-console-consumer.sh --zookeeper localhost:2181,localhost:2182,localhost:2183 --topic TestTopic --from-beginning

9.重新打开一个窗口,启动生产者,发送消息

  ./kafka-console-producer.sh --broker-list 192.168.80.128:9092 --topic TestTopic

  发送:hello kafka,在消费端可以看到 收到信息了。然后多发送几条消息,后面会用到,先发送7条消息。

10.查看kafka的日志:

  cd /tmp/kafka-logs/  (因为 server.properties中配置的 log.dirs=/tmp/kafka-logs)

  会看到 里面有 TestTopic-0 和 TestTopic-1:

  

  因为创建topic的时候创建了两个分区,所以有两个partition。短横线后面的表示 分区的号。

  进入到 TestTopic-0中: cd TestTopic-0/,有两个文件:

  

  如果直接查看log文件的话,里面会是乱码,所以使用下面命令查看日志:

  /usr/java/kafka_2.10-0.10.0.0/bin/kafka-run-class.sh kafka.tools.DumpLogSegments --files 00000000000000000000.log --print-data-log,

  发现日志中有刚刚发的消息,但是发的日志中消息的数量并没有7条,这是因为消息会平均分配在两个partition中,即 TestTopic-0 和 TestTopic-1 中,在TestTopic-0中有4条,就会在TestTopic-1中有3条,一个partition就对应本地的一个物理文件,每个文件中存储的就是消息的内容,消息是持久化存储在磁盘中的,即使消费了的消息也会依然存储在磁盘中,消息的多少和处理消息的效率没太大影响。

二、集群部署(此处为伪集群,部署两个Kafka)

1.开启Zookeeper集群。

2.在 /usr/java中新建kafkaCluster文件夹,然后在 kafkaCluster中新建 kafka1 和 kakfa2 文件夹,将 kafka_2.12-0.10.2.0.tgz 解压到 kafka1 和 kafka2中。

3.修改kafka1 中的 server.perproties文件(192.168.99.50为服务器的IP),

  (1)将zookeeper.connect的值改为:zookeeper.connect=192.168.99.50:2181,192.168.99.50:2182,192.168.99.50:2183,

  (2)将advertised.listeners的值改为:advertised.listeners=PLAINTEXT://192.168.99.50:9092。

  (3)修改端口:listeners=PLAINTEXT://:9092

4.修改kafka2 中的server.perproties文件,

  (1)将zookeeper.connect的值改为:zookeeper.connect=192.168.99.50:2181,192.168.99.50:2182,192.168.99.50:2183,

  (2)将broker.id 的值 改为 :broker.id = 1 ,用于区分是哪一个broker,相当于 ActiveMQ中的myid。

  (3)将advertised.listeners的值改为:advertised.listeners=PLAINTEXT://192.168.99.50:9093。

  (4)修改端口:listeners=PLAINTEXT://:9093

  (5)修改日志文件保存的位置:log.dirs=/tmp/kafka-logs2(伪集群的时候需要修改,否则会报 文件锁定的错,kafka.common.KafkaException: Failed to acquire lock on file .lock in /tmp/kafka-logs. A Kafka instance in another process or thread is using this directory.)

5.分别启动 kafkka1 和 kafka2 ,进入  bin中,

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

6.查看 Zookeeper节点,

  ls /brokers/ids,发现有两个节点,为 [0,1],然后我们 取出 0 和 1 中的值,从 endpoints的值就可以看出我们修改advertised.listeners值的原因,如果不修改的话,默认的是localhost,集群中根本不知道是哪一个。

  get  /brokers/ids/0

  

7.验证集群是否成功,在kafka1 中发消息,在 kafka2 中收消息。

  1) 首先创建一个topic,如果不创建,发消息的时候会自动帮我们创建topic,但是就不会指定partition了。

      ./kafka-topics.sh --create --zookeeper localhost:2181,localhost:2182,localhost:2183  --replication-factor 1 --partition 4 --topic jiqun

  2) 查看Zookeeper上节点:ls /brokers/topics,存在 刚刚创建的jiqun 的topic

      

  3) 在kafka2中 启动消费者,

    ./kafka-console-consumer.sh --zookeeper localhost:2181,localhost:2182,localhost:2183 --topic jiqun --from-beginning

  4) 在kafka中 启动生产者,发送消息,

      ./kafka-console-producer.sh --broker-list 192.168.99.50:9092,192.168.99.50:9093 --topic jiqun,

       发送 :How are you! ,发现 消费者中 接收到 How are you!

  说明集群部署成功!

  5) 查看kafka1 的日志目录,cd /tmp/kafka-logs/,发现有 jiqun-1 和 jiqun-3

      

  6) 查看kafka2 的日志目录,cd /tmp/kafka-logs2/,发现有jiqun-0 和 jiqun-2

     

  这就说明kafka是一个分布式的消息中间件。在不同的 物理机上 存在着真实的文件,又是以顺序存储的。我们可以进入到 partitsion中 找出 刚刚 发送的消息 在哪一个 partision中,发现在jiqun-0上,

  

  kafka消息是顺序写入的,kafka之所以性能高,是因为零拷贝 和 顺序写入磁盘,顺序写入磁盘的效率比随机写入磁盘的效率高几百倍甚至上千倍。

  kafka读取消息 是 consumer 主动pull 消息的,并不是 broker push 到consumer的,这也是和 ActiveMQ的区别,kafka的消费能力是由 consumer来决定的,pull的时候 是根据offset 来拿到消息。

  kafka的message是以topic为基本单位,不同的topic之间是相互独立的,可以理解为不同的topic就是不同的业务,每一个topic中又可以分成几个不同的partision(创建的时候指定),每个partision存储一部分message。Zookeeper上不会保存 message。

  查看日志文件中得到的数据分析:

  • offset: 0 逻辑上值,递增,主键
  • position: 0 物理偏移量
  • CreateTime: 1491920255486 创建时间
  • isvalid: true 是否有效
  • payloadsize: 3 消息大小
  • magic: 1 协议版本号
  • compresscodec: NONE 是否压缩
  • crc: 3544424991 算法
  • payload: How are you! 消息内容

8.配置master-slave模式

  创建topic的时候, ./kafka-topics.sh --create --zookeeper localhost:2181,localhost:2182,localhost:2183  --replication-factor 2 --partition 4 --topic ceshiMasterSlave。

  这样在消息既在master上保存,又在slave中保存。

9.查看哪一个leader,哪一个是follow

  ./kafka-topics.sh --describe --zookeeper localhost:2181,localhost:2182,localhost:2183 --topic ceshiMasterSlave

Kafka(二)-- 安装配置的更多相关文章

  1. Linux下Kafka单机安装配置方法(图文)

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢 介绍 Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了 ...

  2. Linux下Kafka单机安装配置方法

    Kafka是一个分布式的.可分区的.可复制的消息系统.它提供了普通消息系统的功能,但具有自己独特的设计.这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统术语: •Kafka将消息以topi ...

  3. kafka manager安装配置和使用

    kafka manager安装配置和使用 .安装yum源 curl https://bintray.com/sbt/rpm/rpm | sudo tee /etc/yum.repos.d/bintra ...

  4. TensorFlow Python3.7环境下的源码编译(二)安装配置

    源代码树的根目录中包含了一个名为 configure 的 bash 脚本. $ ./configure 接下来,配置系统会给出各种询问,以确认编译时的配置参数.   一.重要参数解释 Please s ...

  5. TensorFlow Python2.7环境下的源码编译(二)安装配置

    源代码树的根目录中包含了一个名为 configure 的 bash 脚本. $ ./configure 接下来,配置系统会给出各种询问,以确认编译时的配置参数.   一.重要参数解释 Do you w ...

  6. Kettle系列文章二(安装配置Kettle+SqlServer+简单的输入输出作业)

    一.下载 Kettle下载地址:https://community.hitachivantara.com/docs/DOC-1009855 下拉到DownLoad,点击红框中的链接进行下载.. 二.解 ...

  7. Linux下Kafka单机安装配置

    安装jdkJDK版本大于1.8 安装kafkatar -zxvf kafka_2.11-0.10.2.1.tgz mv kafka_2.11-0.10.2.1 /usr/local/kafka 配置k ...

  8. Kafka实战系列--Kafka的安装/配置

    *) 安装和测试 cd /path/to/server#) 下载kafka二进制包wget http://apache.fayea.com/apache-mirror/kafka/0.8.1.1/ka ...

  9. kafka单机安装配置

    1.下载kafka wget https://www.apache.org/dyn/closer.cgi?path=/kafka/0.8.2.1/kafka_2.9.2-0.8.2.1.tgz 2.解 ...

  10. MongoDB(二)——安装配置了解

    前边介绍了MongoDB的大概理论知识,这篇来对MongoDB进行一下安装使用,支持安装在windows和linux上,当然了很多其它情况下我们是安装在linux上,由于毕竟server用linux的 ...

随机推荐

  1. 《FPGA全程进阶---实战演练》第二十一章之 几种常用电平分析及特性

    TTL,CMOS以及LVTTL,LVCMOS TTL和CMOS是数字电路中两种常见的逻辑电平,LVTTL和LVCMOS是两者低电平版本.TTL是流控器件,输入电阻小,TTL电平器件速度快,驱动能力大, ...

  2. 【CUDA学习】结构体指针复制

    内核函数中要用data结构作用参数 typedef struct { int* value; int* num; } data; //host端 data* h_input; h_input=(dat ...

  3. c++ 常用数据类型,命名规则, 不常有数据类型

    1. 常用数据类型 最大值0111111111111111 = 32767最小值1000000000000000 = -32768 short 最低16位 2**7 - 1 负值:反码 int 至少和 ...

  4. (转)android系统架构及源码目录结构

    转自:http://blog.csdn.net/finewind/article/details/46324507 1. Android系统架构: android系统架构采用了分层架构的思想,如下图所 ...

  5. Python——hmac

    该模块在Python中实现 RFC 2104 中规范的 HMAC 算法. 目录 一.HMAC 对象 1. HMAC.update() 2. HMAC.digest() 3. HMAC.hexdiges ...

  6. 大数据:Spark Core(二)Driver上的Task的生成、分配、调度

    1. 什么是Task? 在前面的章节里描写叙述过几个角色,Driver(Client),Master,Worker(Executor),Driver会提交Application到Master进行Wor ...

  7. Windows命令处理进程

    1.  查看进程命令 tasklist 2.以翻页模式查看进程 tasklist  |  more 3.搜索关键字查找进程 tasklist  |  findstr  "cmd" ...

  8. Python爬虫学习——获取网页

    通过GET请求获取返回的网页,其中加入了User-agent信息,不然会抛出"HTTP Error 403: Forbidden"异常, 因为有些网站为了防止这种没有User-ag ...

  9. Android 获取内存信息

    由于工作需要,研究了一下android上获取内存信息的方法,总结如下: 1.SDK获取 在Java层利用API获取很简单,直接使用ActivityManager.MemoryInfo类即可,代码如下: ...

  10. Thinkphp5 Route用法

    域名路由:domain 1.application/router.php 文件位置,吧一下代码放进去就可以了 use think\Route; Route::domain('app.tp5a.com' ...