设为首页 收藏本站
查看: 1130|回复: 0

[经验分享] Centos安装Kafka集群

[复制链接]

尚未签到

发表于 2019-1-31 09:52:24 | 显示全部楼层 |阅读模式
  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?

  •   #tar -xvf kafka_2.10-0.8.2.0.tgz
  •   # cd kafka_2.10-0.8.2.0
配置
  修改config/server.properties
  [html] view plaincopyprint?

  •   broker.id=1
  •   port=9092
  •   host.name=hadoop104
  •   socket.send.buffer.bytes=1048576
  •   socket.receive.buffer.bytes=1048576
  •   socket.request.max.bytes=104857600
  •   log.dir=./kafka1-logs
  •   num.partitions=10
  •   zookeeper.connect=hadoop107:2181,hadoop104:2181,hadoop108:2181
启动Kafka服务
  [html] view plaincopyprint?

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

创建Topic
  [html] view plaincopyprint?

  •   #bin/kafka-topics.sh --create --zookeeper hadoop107:2181,hadoop104:2181,hadoop108:2181 --replication-factor 1 --partitions 1 --topic test
查看Topic
  [html] view plaincopyprint?

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

producer发送消息
  [html] view plaincopyprint?

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

consumer接收消息
  [html] view plaincopyprint?

  •   #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?

  •   #cp -r kafka_2.10-0.8.2.0 kafka_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?

  •   kafka_2/config/server.properties
  •   broker.id=2
  •   port=9093
  •   kafka_3/config/server.properties
  •   broker.id=3
  •   port=9094
启动
  启动另外两个Broker
  [html] view plaincopyprint?

  •   #cd kafka_2
  •   # bin/kafka-server-start.sh config/server.properties &
  •   #cd ../kafka_3
  •   # bin/kafka-server-start.sh config/server.properties &
创建一个replication factor为3的topic
  [html] view plaincopyprint?

  •   #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?

  •   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?

  •   #scp -r config/ root@hadoop105:/root/hadoop/kafka_4/
  •   #scp -r config/ root@hadoop105:/root/hadoop/kafka_5/
配置
  并分别修改内容如下:
  [html] view plaincopyprint?

  •   kafka_4
  •   brokerid=4
  •   port=9095
  •   host.name=hadoop105
  •   kafka_5
  •   brokerid=5
  •   port=9096
  •   host.name=hadoop105
  启动服务
  [html] view plaincopyprint?

  •   #cd kafka_4
  •   # bin/kafka-server-start.sh config/server.properties &
  •   #cd ../kafka_5
  •   # 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可以存储相当长时间的消息(一周)。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-669911-1-1.html 上篇帖子: Install Kafka service to Cloudera Manager 5.2 下篇帖子: kafka入门
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表