kafka是LinkedIn开发并开源的一个分布式MQ系统,现在是Apache的一个孵化项目。在它的主页描述kafka为一个高吞吐量的分布式(能 将消息分散到不同的节点上)MQ。在这片博文中,作者简单提到了开发kafka而不选择已有MQ系统的原因。两个原因:性能和扩展性。Kafka仅仅由 7000行Scala编写,据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。

安装准备

版本

Kafka版本:kafka_2.10-0.8.2.0

Zookeeper版本:3.4.6

Zookeeper 集群:hadoop104,hadoop107,hadoop108

Zookeeper集群的搭建参见:在CentOS上安装ZooKeeper集群

物理环境

安装两台物理机:

192.168.40.104  hadoop104(运行3个Broker)

192.148.40.105  hadoop105(运行2个Broker)

该集群的创建主要分为三步,单节点单Broker,单节点多Broker,多节点多Broker

单节点单Broker

本节以hadoop104上创建一个Broker为例

下载kafka

下载路径:http://kafka.apache.org/downloads.html

[html] view plaincopyprint?

 
  1. #tar -xvf kafka_2.10-0.8.2.0.tgz
  2. # cd kafka_2.10-0.8.2.0

配置

修改config/server.properties

[html] view plaincopyprint?

 
  1. broker.id=1
  2. port=9092
  3. host.name=hadoop104
  4. socket.send.buffer.bytes=1048576
  5. socket.receive.buffer.bytes=1048576
  6. socket.request.max.bytes=104857600
  7. log.dir=./kafka1-logs
  8. num.partitions=10
  9. zookeeper.connect=hadoop107:2181,hadoop104:2181,hadoop108:2181

启动Kafka服务

[html] view plaincopyprint?

 

  1. #bin/kafka-server-start.sh config/server.properties

创建Topic

[html] view plaincopyprint?

 

  1. #bin/kafka-topics.sh --create --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --replication-factor 1 --partitions 1 --topic test

查看Topic

[html] view plaincopyprint?

 

  1. #bin/kafka-topics.sh --list --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181

输出:

producer发送消息

[html] view plaincopyprint?

 

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

consumer接收消息

[html] view plaincopyprint?

 

  1. #bin/kafka-console-consumer.sh --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --topic test --from-beginning

如果要最新的数据,可以不带--from-beginning参数即可。

# /bin/kafka-console-consumer.sh --zookeeper  hadoop107:2181,hadoop104:2181,hadoop108:2181  --topic test

单节点多个Broker

配置

将上个章节中的文件夹再复制两份分别为kafka_2,kafka_3

[html] view plaincopyprint?

 

  1. #cp -r kafka_2.10-0.8.2.0 kafka_2
  2. #cp -r kafka_2.10-0.8.2.0 kafka_3

分别修改kafka_2/config/server.properties以及kafka_3/config/server.properties 文件中的broker.id,以及port属性,确保唯一性

[html] view plaincopyprint?

 

  1. kafka_2/config/server.properties
  2. broker.id=2
  3. port=9093
  4. kafka_3/config/server.properties
  5. broker.id=3
  6. port=9094

启动

启动另外两个Broker

[html] view plaincopyprint?

 

  1. #cd kafka_2
  2. # bin/kafka-server-start.sh config/server.properties &
  3. #cd ../kafka_3
  4. # bin/kafka-server-start.sh config/server.properties &

创建一个replication factor为3的topic

[html] view plaincopyprint?

 

  1. #bin/kafka-topics.sh --create --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic

查看Topic的状态

[html] view plaincopyprint?

 

  1. bin/kafka-topics.sh --describe --zookeeper  hadoop107:2181,hadoop104:2181,hadoop108:2181  --topic my-replicated-topic

从上面的内容可以看出,该topic包含1个part,replicationfactor为3,且Node3 是leador
解释如下:
  • "leader" is the node responsible for all reads and writes for the
    given partition. Each node will be the leader for a randomly selected
    portion of the partitions.
  • "replicas" is the list of nodes that replicate the log for this
    partition regardless of whether they are the leader or even if they are
    currently alive.
  • "isr" is the set of "in-sync" replicas. This is the subset of the
    replicas list that is currently alive and caught-up to the leader.

 
再来看一下之前创建的test topic, 从下图可以看出没有进行replication
 

多个节点的多个Broker

 
在hadoop105上分别把下载的文件解压缩到kafka_4,kafka_5两个文件夹中,再将hadoop104上的server.properties配置文件拷贝到这连个文件夹中
[html] view plaincopyprint?

 

  1. #scp -r config/ root@hadoop105:/root/hadoop/kafka_4/
  2. #scp -r config/ root@hadoop105:/root/hadoop/kafka_5/

配置

并分别修改内容如下:
[html] view plaincopyprint?

 

  1. kafka_4
  2. brokerid=4
  3. port=9095
  4. host.name=hadoop105
  5. kafka_5
  6. brokerid=5
  7. port=9096
  8. host.name=hadoop105

启动服务

[html] view plaincopyprint?

 

  1. #cd kafka_4
  2. # bin/kafka-server-start.sh config/server.properties &
  3. #cd ../kafka_5
  4. # bin/kafka-server-start.sh config/server.properties &
 
到目前为止,两台物理机上的5个Broker已经启动完毕

总结

在kafka的核心思路中,不需要在内存里缓存数据,因为操作系统的文件缓存已经足够完善和强大,只要不做随机写,顺序读写的性能是非常高效的。
kafka的数据只会顺序append,数据的删除策略是累积到一定程度或者超过一定时间再删除。Kafka另一个独特的地方是将消费者信息保存在客户端
而不是MQ服务器,这样服务器就不用记录消息的投递过程,每个客户端都自己知道自己下一次应该从什么地方什么位置读取消息,消息的投递过程也是采用客户端
主动pull的模型,这样大大减轻了服务器的负担。Kafka还强调减少数据的序列化和拷贝开销,它会将一些消息组织成Message
Set做批量存储和发送,并且客户端在pull数据的时候,尽量以zero-copy的方式传输,利用sendfile(对应java里的
FileChannel.transferTo/transferFrom)这样的高级IO函数来减少拷贝开销。可见,kafka是一个精心设计,特定于
某些应用的MQ系统,这种偏向特定领域的MQ系统我估计会越来越多,垂直化的产品策略值的考虑。

只要磁盘没有限制并且不出现损失,kafka可以存储相当长时间的消息(一周)。

转:http://www.centoscn.com/CentosServer/cluster/2015/0312/4863.html

Centos安装Kafka集群的更多相关文章

  1. Centos7.5安装kafka集群

    Tags: kafka Centos7.5安装kafka集群 Centos7.5安装kafka集群 主机环境 软件环境 主机规划 主机安装前准备 安装jdk1.8 安装zookeeper 安装kafk ...

  2. 快速安装 kafka 集群

    前言 最近因为工作原因,需要安装一个 kafka 集群,目前网络上有很多相关的教程,按着步骤来也能完成安装,只是这些教程都显得略微繁琐.因此,我写了这篇文章帮助大家快速完成 kafka 集群安装.   ...

  3. CentOS7 安装kafka集群

    1. 环境准备 JDK1.8 ZooKeeper集群(参见本人博文) Scala2.12(如果需要做scala开发的话,安装方法参见本人博文) 本次安装的kafka和zookeeper集群在同一套物理 ...

  4. RedHat6.5安装kafka集群

    版本号: Redhat6.5    JDK1.8     zookeeper-3.4.6   kafka_2.11-0.8.2.1 1.软件环境 1.3台RedHat机器,master.slave1. ...

  5. helm安装kafka集群并测试其高可用性

    介绍 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据. 这种动作( ...

  6. 安装kafka 集群 步骤

    1.下载 http://mirror.bit.edu.cn/apache/kafka/2.1.0/kafka_2.11-2.1.0.tgz 2.解压  tar -zxvf kafka_2.11-2.1 ...

  7. centos安装k8s集群

     准备工作 关闭swap,注释swap分区 swapoff -a 配置内核参数,将桥接的IPv4流量传递到iptables的链 cat > /etc/sysctl.d/k8s.conf < ...

  8. 安装kafka集群

    1解压tar包 tar -zxvf kafka_2.-.tgz 2.进入config目录 3.配置server.properties文件 # Licensed to the Apache Softwa ...

  9. Centos 安装k8s 集群(单master开发环境)

    本教程是在VM中搭建K8s 所以第一步骤先配置虚拟机的ip 和上网情况详细参考https://www.cnblogs.com/chongyao/p/9209527.html 开始搭建K8s集群 两台机 ...

随机推荐

  1. c# 文件转换成base64

    private static void ReadFromFile() { FileStream fsForRead = new FileStream("c9a78c8a-29b0-410d- ...

  2. 浅谈 GPU图形固定渲染管线

    图形渲染管道被认为是实时图形渲染的核心,简称为管道.管道的主要功能是由给定的虚拟摄像机.三维物体.灯源.光照模型.纹理贴图或其他来产生或渲染一个二维图像.由此可见,渲染管线是实时渲染技术的底层工具.图 ...

  3. Leetcode 313. super ugly number

    Write a program to find the nth super ugly number. Super ugly numbers are positive numbers whose all ...

  4. Bzoj3663/4660 CrazyRabbit

    题意:给定平面上一个圆和一堆圆外的点,要求选出尽可能多的点使得它们之间两两连线都不和圆相交.保证任意两点连线不和圆相切.点数<=2000 这题是很久以前在某张课件上看见的.看了题解还搞了三小时, ...

  5. UVA1555-- Garland(推导+二分)

    题意:有n个灯,给定第一盏灯A的高度,接下去每盏灯的高度按照公式计算,求使所有灯都不会落在地上(允许碰触)的B的最低高度. uva 输出 double 用 %f,这一波坑的! #include < ...

  6. 网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

    同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出 ...

  7. Alpha版本十天冲刺——Day 7

    站立式会议 祝曹鑫杰和常松童鞋生日快乐!短短几天冲刺,就迎来了三位队员的生日,希望也给我们的Alpha版本带来好运,加油! 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 上传图片接口 无 ...

  8. 我总结的js性能优化的小知识

    前言 一直在学习javascript,也有看过<犀利开发Jquery内核详解与实践>,对这本书的评价只有两个字犀利,可能是对javascript理解的还不够透彻异或是自己太笨,更多的是自己 ...

  9. vim配置有竖对齐线

    https://github.com/lvxiaobo616/vim-indent-guides 参考 https://github.com/Yggdroot/indentLine 先安装 Yggdr ...

  10. 机器学习笔记--KNN算法1

    前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 K ...