一、单机部署

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. JS 控制页面超时后自动跳转到登陆页面

    <span style="font-size: small;"><script language="javascript"> var m ...

  2. SQL server 分页方法小结

    这里面介绍一下常用的分页方法: 1.使用top来分页 select top @pageSize * from table where id not in (select top @pageSize*( ...

  3. [Intellij] 软件设置和常用快捷键

    理解Project 和 Module 一个 Project 是由一个或多个 Module 组成,模块之间尽量是处在同一个项目业务的的情况下,彼此之间互相依赖关联.如: Project : spring ...

  4. SSh on Ubuntu

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...

  5. Pandas 读取文本格式数据

    title 其实书中说的我认为不够全,因为公司里面现在主要用stata和spss,暂时还没有用到sas,excel也很少用 那么读取文件的方式,因为有人已经总结了,我就偷过来算了 对应不同的文件类型有 ...

  6. C语言中的控制语句: 判断、环循等;

    列举这一部分的目的就是注意它的写法,尤其是 分号 : 的位置: 1. if-else if else 语句: if (表达式1) 语句1: else if (表达式2) 语句2: else 语句3: ...

  7. 第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用

    第三百三十二节,web爬虫讲解2—Scrapy框架爬虫—Scrapy使用 xpath表达式 //x 表示向下查找n层指定标签,如://div 表示查找所有div标签 /x 表示向下查找一层指定的标签 ...

  8. Python——signal

    该模块为在Python中使用信号处理句柄提供支持.下面是一些使用信号和他们的句柄时需要注意的事项: 除了信号 SIGCHLD 的句柄遵从底层的实现外,专门针对一个信号的句柄一旦设置,除非被明确地重置, ...

  9. Python property,属性

    參考资料 http://www.ibm.com/developerworks/library/os-pythondescriptors/ 顾名思义,property用于生成一个属性.通过操作这个属性. ...

  10. interpro 数据库

    interpro 通过整合多个蛋白相关的数据库,提供了一个方便的对蛋白序列进行功能注释的平台,功能注释的内容包括蛋白质家族预测,domain 和 结合位点预测 interoro 在整合多个数据库的同时 ...