安装及部署

一、环境配置

  • 操作系统:Cent OS 7

  • Kafka版本:0.9.0.0

  • Kafka官网下载:请点击

  • JDK版本:1.7.0_51

  • SSH Secure Shell版本:XShell 5

二、操作过程

1、下载Kafka并解压

  • 下载:

  1. curl -L -O http://mirrors.cnnic.cn/apache/kafka/0.9.0.0/kafka_2.10-0.9.0.0.tgz
  • 解压:

  1. tar zxvf kafka_2.10-0.9.0.0.tgz

2、Kafka目录介绍

  • /bin 操作kafka的可执行脚本,还包含windows下脚本

  • /config 配置文件所在目录

  • /libs 依赖库目录

  • /logs 日志数据目录,目录kafka把server端日志分为5种类型,分为:server,request,state,log-cleaner,controller

3、配置

  • 配置zookeeper

请参考zookeeper

  • 进入kafka安装工程根目录编辑config/server.properties

kafka最为重要三个配置依次为:broker.id、log.dir、zookeeper.connect,kafka server端config/server.properties参数说明和解释如下:

server.properties配置属性说明

4、启动Kafka

  • 启动

  1. 进入kafka目录,敲入命令 bin/kafka-server-start.sh config/server.properties &
  • 检测2181与9092端口

  1. netstat -tunlp|egrep "(2181|9092)"
  2. tcp 0 0 :::2181 :::* LISTEN 19787/java
  3. tcp 0 0 :::9092 :::* LISTEN 28094/java

说明:

Kafka的进程ID为28094,占用端口为9092

QuorumPeerMain为对应的zookeeper实例,进程ID为19787,在2181端口监听

5、单机连通性测试

启动2个XSHELL客户端,一个用于生产者发送消息,一个用于消费者接受消息。

  • 运行producer,随机敲入几个字符,相当于把这个敲入的字符消息发送给队列。

  1. bin/kafka-console-producer.sh --broker-list 192.168.1.181:9092 --topic test

说明:早版本的Kafka,–broker-list 192.168.1.181:9092需改为–zookeeper 192.168.1.181:2181

  • 运行consumer,可以看到刚才发送的消息列表。

  1. bin/kafka-console-consumer.sh --zookeeper 192.168.1.181:2181 --topic test --from-beginning
  • 注意:

producer,指定的Socket(192.168.1.181+9092),说明生产者的消息要发往kafka,也即是broker

consumer, 指定的Socket(192.168.1.181+2181),说明消费者的消息来自zookeeper(协调转发)

上面的只是一个单个的broker,下面我们来实验一个多broker的集群。

6、搭建一个多个broker的伪集群

刚才只是启动了单个broker,现在启动有3个broker组成的集群,这些broker节点也都是在本机上。

(1)为每一个broker提供配置文件

我们先看看config/server0.properties配置信息:

  1. broker.id=
  2. listeners=PLAINTEXT://:9092
  3. port=
  4. host.name=192.168.1.181
  5. num.network.threads=
  6. num.io.threads=
  7. socket.send.buffer.bytes=
  8. socket.receive.buffer.bytes=
  9. socket.request.max.bytes=
  10. log.dirs=/tmp/kafka-logs
  11. num.partitions=
  12. num.recovery.threads.per.data.dir=
  13. log.retention.hours=
  14. log.segment.bytes=
  15. log.retention.check.interval.ms=
  16. log.cleaner.enable=false
  17. zookeeper.connect=192.168.1.181:
  18. zookeeper.connection.timeout.ms=
  19. queued.max.requests =
  20. log.cleanup.policy = delete
  • 说明:

broker.id为集群中唯一的标注一个节点,因为在同一个机器上,所以必须指定不同的端口和日志文件,避免数据被覆盖。

在上面单个broker的实验中,为什么kafka的端口为9092,这里可以看得很清楚。

kafka cluster怎么同zookeeper交互的,配置信息中也有体现。

那么下面,我们仿照上面的配置文件,提供2个broker的配置文件:

  • server1.properties:

  1. broker.id=
  2. listeners=PLAINTEXT://:9093
  3. port=
  4. host.name=192.168.1.181
  5. num.network.threads=
  6. num.io.threads=
  7. socket.send.buffer.bytes=
  8. socket.receive.buffer.bytes=
  9. socket.request.max.bytes=
  10. log.dirs=/tmp/kafka-logs1
  11. num.partitions=
  12. num.recovery.threads.per.data.dir=
  13. log.retention.hours=
  14. log.segment.bytes=
  15. log.retention.check.interval.ms=
  16. log.cleaner.enable=false
  17. zookeeper.connect=192.168.1.181:
  18. zookeeper.connection.timeout.ms=
  19. queued.max.requests =
  20. log.cleanup.policy = delete
  • server2.properties:

  1. broker.id=
  2. listeners=PLAINTEXT://:9094
  3. port=
  4. host.name=192.168.1.181
  5. num.network.threads=
  6. num.io.threads=
  7. socket.send.buffer.bytes=
  8. socket.receive.buffer.bytes=
  9. socket.request.max.bytes=
  10. log.dirs=/tmp/kafka-logs2
  11. num.partitions=
  12. num.recovery.threads.per.data.dir=
  13. log.retention.hours=
  14. log.segment.bytes=
  15. log.retention.check.interval.ms=
  16. log.cleaner.enable=false
  17. zookeeper.connect=192.168.1.181:
  18. zookeeper.connection.timeout.ms=
  19. queued.max.requests =
  20. log.cleanup.policy = delete
(2)启动所有的broker

命令如下:

  1. bin/kafka-server-start.sh config/server0.properties & #启动broker0
  2. bin/kafka-server-start.sh config/server1.properties & #启动broker1
  3. bin/kafka-server-start.sh config/server2.properties & #启动broker2

查看2181、9092、9093、9094端口

  1. netstat -tunlp|egrep "(2181|9092|9093|9094)"
  2. tcp 0 0 :::9093 :::* LISTEN 29725/java
  3. tcp 0 0 :::2181 :::* LISTEN 19787/java
  4. tcp 0 0 :::9094 :::* LISTEN 29800/java
  5. tcp 0 0 :::9092 :::* LISTEN 29572/java

一个zookeeper在2181端口上监听,3个kafka cluster(broker)分别在端口9092,9093,9094监听。

(3)创建topic
  1. bin/kafka-topics.sh --create --topic topic_1 --partitions 1 --replication-factor 3 \--zookeeper localhost:2181
  2. bin/kafka-topics.sh --create --topic topic_2 --partitions 1 --replication-factor 3 \--zookeeper localhost:2181
  3. bin/kafka-topics.sh --create --topic topic_3 --partitions 1 --replication-factor 3 \--zookeeper localhost:2181

查看topic创建情况:

  1. bin/kafka-topics.sh --list --zookeeper localhost:2181
  2. test
  3. topic_1
  4. topic_2
  5. topic_3
  6. [root@atman081 kafka_2.10-0.9.0.0]# bin/kafka-topics.sh --describe --zookeeper localhost:2181
  7. Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
  8. Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
  9. Topic:topic_1 PartitionCount:1 ReplicationFactor:3 Configs:
  10. Topic: topic_1 Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
  11. Topic:topic_2 PartitionCount:1 ReplicationFactor:3 Configs:
  12. Topic: topic_2 Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
  13. Topic:topic_3 PartitionCount:1 ReplicationFactor:3 Configs:
  14. Topic: topic_3 Partition: 0 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1

上面的有些东西,也许还不太清楚,暂放,继续试验。需要注意的是topic_1的Leader=2

(4)模拟客户端发送,接受消息
  • 发送消息

  1. bin/kafka-console-producer.sh --topic topic_1 --broker-list 192.168.1.181:9092,192.168.1.181:9093,192.168.1.181:9094
  • 接收消息

  1. bin/kafka-console-consumer.sh --topic topic_1 --zookeeper 192.168.1.181:2181 --from-beginning

需要注意,此时producer将topic发布到了3个broker中,现在就有点分布式的概念了。

(5) kill some broker

kill broker(id=0)

首先,我们根据前面的配置,得到broker(id=0)应该在9092监听,这样就能确定它的PID了。

broker0没kill之前topic在kafka cluster中的情况

  1. bin/kafka-topics.sh --describe --zookeeper localhost:2181
  2. Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
  3. Topic: test Partition: 0 Leader: 0 Replicas: 0 Isr: 0
  4. Topic:topic_1 PartitionCount:1 ReplicationFactor:3 Configs:
  5. Topic: topic_1 Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
  6. Topic:topic_2 PartitionCount:1 ReplicationFactor:3 Configs:
  7. Topic: topic_2 Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
  8. Topic:topic_3 PartitionCount:1 ReplicationFactor:3 Configs:
  9. Topic: topic_3 Partition: 0 Leader: 2 Replicas: 0,2,1 Isr: 2,1,0

kill之后,再观察,做下对比。很明显,主要变化在于Isr,以后再分析

  1. bin/kafka-topics.sh --describe --zookeeper localhost:2181
  2. Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
  3. Topic: test Partition: 0 Leader: -1 Replicas: 0 Isr:
  4. Topic:topic_1 PartitionCount:1 ReplicationFactor:3 Configs:
  5.  
  6. Topic: topic_1 Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1
  7. Topic:topic_2 PartitionCount:1 ReplicationFactor:3 Configs:
  8. Topic: topic_2 Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2
  9. Topic:topic_3 PartitionCount:1 ReplicationFactor:3 Configs:
  10. Topic: topic_3 Partition: 0 Leader: 2 Replicas: 0,2,1 Isr: 2,1

测试下,发送消息,接受消息,是否收到影响。

  • 发送消息

  1. bin/kafka-console-producer.sh --topic topic_1 --broker-list 192.168.1.181:9092,192.168.1.181:9093,192.168.1.181:9094
  • 接收消息

  1. bin/kafka-console-consumer.sh --topic topic_1 --zookeeper 192.168.1.181:2181 --from-beginning

可见,kafka的分布式机制,容错能力还是挺好的~

Kafka介绍

1、kafka有什么?

  • producer 消息的生成者,即发布消息

  • consumer 消息的消费者,即订阅消息

  • broker Kafka以集群的方式运行,可以由一个或多个服务组成,服务即broker

  • zookeeper 协调转发

2、kafka的工作图

producers通过网络将消息发送到Kafka集群,集群向消费者提供消息

kafka对消息进行归纳,即topic,也就是说producer发布topic,consumer订阅topic

参考资料

apache kafka技术分享系列(目录索引)

Kafka深度解析,众人推荐,精彩好文!

Kafka安装及部署的更多相关文章

  1. kafka安装和部署

    阅读目录 一.环境配置 二.操作过程 Kafka介绍 安装及部署 回到顶部 一.环境配置 操作系统:Cent OS 7 Kafka版本:0.9.0.0 Kafka官网下载:请点击 JDK版本:1.7. ...

  2. 【3】Kafka安装及部署

    一.环境准备 Linux操作系统 Java运行环境(1.6或以上) zookeeper 集群环境,可参照Zookeeper集群部署 . 服务器列表: 配置主机名映射. vi /etc/hosts ## ...

  3. kafka系列一、kafka安装及部署、集群搭建

    一.环境准备 操作系统:Cent OS 7 Kafka版本:kafka_2.10 Kafka官网下载:请点击 JDK版本:1.8.0_171 zookeeper-3.4.10 二.kafka安装配置 ...

  4. Kafka的安装和部署及测试

    1.简介 大数据分析处理平台包括数据的接入,数据的存储,数据的处理,以及后面的展示或者应用.今天我们连说一下数据的接入,数据的接入目前比较普遍的是采用kafka将前面的数据通过消息的方式,以数据流的形 ...

  5. Kafka安装部署

    1.从官网下载安装包,并通过Xftp5上传到机器集群上    下载kafka_2.11-1.1.0.tgz版本,并通过Xftp5上传到hadoop机器集群的第一个节点node1上的/opt/uploa ...

  6. zookeeper与kafka安装部署及java环境搭建(发布订阅模式)

    1. ZooKeeper安装部署 本文在一台机器上模拟3个zk server的集群安装. 1.1. 创建目录.解压 cd /usr/ #创建项目目录 mkdir zookeeper cd zookee ...

  7. Logstash安装及部署

    安装及部署 一.环境配置 操作系统:Cent OS 7 Logstash版本:2.1.1.tar.gz JDK版本:1.7.0_51 SSH Secure Shell版本:XShell 5 二.操作过 ...

  8. Kafka集群部署

    一. 关于kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键 ...

  9. Zookeeper+Kafka集群部署(转)

    Zookeeper+Kafka集群部署 主机规划: 10.200.3.85  Kafka+ZooKeeper 10.200.3.86  Kafka+ZooKeeper 10.200.3.87  Kaf ...

随机推荐

  1. C++ 中 ZeroMemory、memset 危险需慎用

    使用C/C++编程时,常使用ZeroMemory.memset或 “={0}”来对结构体对象进行初始化或清零.然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人今日解决一个导致宕机 ...

  2. 转:PHP--获取响应头(Response Header)方法

    转:http://blog.sina.com.cn/s/blog_5f54f0be0102uvxu.html PHP--获取响应头(Response Header)方法 方法一: ========== ...

  3. [原创]C#按比例缩放窗体控件及字体

    按照比例缩放窗体控件及字体,如需等比例缩放,只需将x,y的比例设置成相同即可. 为了减小误差,建议使用原始尺寸来计算比例. private float X, Y; private bool b = f ...

  4. iOS开发UI篇—Kvc简单介绍

    ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observ ...

  5. CPU指令系统

    CPU就是通过指令系统来操控寄存器然后实现读取数据的,所以我们必须介绍一下CPU的指令系统 如果我们知道指令的英文全称,这对我们理解指令的作用有很大帮助,所以贴出指令英文全称 接下来就是介绍一些主要的 ...

  6. Java String字符串补0或空格

    package cn.com.songjy; import java.text.NumberFormat; //Java 中给数字左边补0 public class NumberFormatTest  ...

  7. RFID Hacking④:使用ProxMark3 破解门禁

    文中提及的部分技术可能带有一定攻击性,仅供安全学习和教学用途,禁止非法使用! 0×00 前言 国际黑客大会Defcon传统之一:开锁!因为黑客认为锁也是一种安全挑战.我们在黑客题材电影.电视剧中也常常 ...

  8. Javascript笔记一

    Javascript: ECMAscript :相当于翻译器 翻译电脑于代码  解释器 DOM document object model  文档 对象 模型  --->document  获取 ...

  9. HDU 1536 & 1944

    http://acm.hdu.edu.cn/showproblem.php?pid=1536 http://acm.hdu.edu.cn/showproblem.php?pid=1944 一样的题 题 ...

  10. 黑马程序员:Java编程_基础语法

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 一.数据类型 基本数据类型(简单数据类型.语言所内置的类型) 引用数据类型:(自 ...