上次介绍了ES集群搭建的方法,希望能帮助大家,这儿我再接着介绍kafka集群,接着上次搭建的效果。

首先我们来简单了解下什么是kafka和zookeeper?

Apache kafka 是一个分布式的基于push-subscribe的消息系统,它具备快速、可扩展、可持久化的特点。它现在是Apache旗下的一个开源系统,作为hadoop生态系统的一部分,被各种商业公司广泛应用。它的最大的特性就是可以实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/spark流式处理引擎。

特点:

  • 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒
  • 可扩展性:kafka集群支持热扩展
  • 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失
  • 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)
  • 高并发:支持数千个客户端同时读写

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名服务等。

集群角色:

  • Leader服务器是整个zookeeper集群工作机制中的核心
  • Follower服务器是zookeeper集群状态的跟随者
  • Observer 服务器充当一个观察者的角色

接下来就直接进去正题,如何正确的搭建kafka和zookeeper集群。

一、zookeeper集群配置

1、修改主机名

  1. kafka1.example.com --> 172.16.81.131
  2. kafka2.example.com --> 172.16.81.132

2、修改hosts文件

  1. [root@kafka1 opt]# cat /etc/hosts
  2.   127.0.0.1 kafka1.example.com localhost localhost.localdomain localhost4 localhost4.localdomain4
  3.   ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. [root@kafka2 opt]# cat /etc/hosts
  5.   127.0.0.1 kafka2.example.com localhost localhost.localdomain localhost4 localhost4.localdomain4
  6.   ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

3、安装jdk

  1. cd /opt
  2. jdk-8u131-linux-x64.tar.gz
  3. tar -zxvf jdk-8u131-linux-x64.tar.gz
  4. mv jdk-1.8.0_131 /usr/local/

4、配置jdk环境变量

  1. [root@kafka1 opt]# tail -10 /etc/profile
  2. #JAVA环境变量
  3. export JAVA_HOME=/usr/local/jdk1.8.0_131
  4. export JAVA_BIN=$JAVA_HOME/bin
  5. export JAVA_LIB=$JAVA_HOME/lib
  6. export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
  7. export PATH=$JAVA_BIN:$PATH
  8. export _JAVA_SR_SIGNUM=12
  9. #zookeeper环境变量
  10. export ZOOKEEPER_HOME=/opt/zookeeper/
  11. export PATH=$ZOOKEEPER_HOME/bin:$PATH
  12. export PATH
  13. [root@kafka2 opt]# tail -10 /etc/profile
  14. #JAVA环境变量
  15. export JAVA_HOME=/usr/local/jdk1.8.0_131
  16. export JAVA_BIN=$JAVA_HOME/bin
  17. export JAVA_LIB=$JAVA_HOME/lib
  18. export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
  19. export PATH=$JAVA_BIN:$PATH
  20. export _JAVA_SR_SIGNUM=12
  21. #zookeeper环境变量
  22. export ZOOKEEPER_HOME=/opt/zookeeper/
  23. export PATH=$ZOOKEEPER_HOME/bin:$PATH
  24. export PATH
  25. #应用环境变量
  26. source /etc/profile

5、下载软件包   

  1. zookeeper-3.4.10.tar.gz

  #解压
  tar -zxvf zookeeper-3.4.10.tar.gz
  mv zookeeper-3.4.10 zookeeper
  cd /opt/zookeeper/config/
  cp zoo_sample.cfg zoo.cfg

6、编辑zookeeper配置文件

  1. [root@kafka1 opt]# cat /opt/zookeeper/conf/zoo.cfg | grep -v '^#' | grep -v '^$'
  2. tickTime=2000
  3. initLimit=20
  4. syncLimit=10
  5. dataDir=/opt/data/zookeeper/data
  6. datalogDir=/opt/data/zookeeper/logs
  7. clientPort=2181
  8. server.1=172.16.81.131:2888:3888
  9. server.2=172.16.81.132:2888:3888
  10. [root@kafka2 opt]# cat /opt/zookeeper/conf/zoo.cfg | grep -v '^#' | grep -v '^$'
  11. tickTime=2000
  12. initLimit=20
  13. syncLimit=10
  14. dataDir=/opt/data/zookeeper/data
  15. datalogDir=/opt/data/zookeeper/logs
  16. clientPort=2181
  17. server.1=172.16.81.131:2888:3888
  18. server.2=172.16.81.132:2888:3888

#注意:在zookeeper配置文件中或者后面不能跟注释文字,不然会报错!
#说明:
tickTime: 这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
2888端口:表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;
3888端口:表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口

7、分别在kafka1和kafka2服务器上创建datadir目录

  1. mkdir -p /opt/kafka/data
  2. mkdir -p /opt/kafka/data/zookeeper

8、分别写入id

  1. [root@kafka1 opt]# echo "1" > /opt/kafka/data/zookeeper/myid
  2. [root@kafka2 ~]# echo "2" > /opt/kafka/data/zookeeper/myid
  3. #注意ID不能一样

9、启动zookeeper集群

  1. cd /opt/zookeeper/
  2. bin/zkServer.sh start

10、启动效果

  1. [rootkafka1 ~]# netstat -nlpt | grep -E "2181|2888|3888"
  2. tcp 0 0 :::2181 :::* LISTEN 33644/java
  3. tcp 0 0 ::ffff:10.1.1.247:3888 :::* LISTEN 33644/java
  4. [root@kafka2 ~]# netstat -nlpt | grep -E "2181|2888|3888"
  5. tcp 0 0 :::2181 :::* LISTEN 35016/java
  6. tcp 0 0 ::ffff:10.1.1.248:2888 :::* LISTEN 35016/java #哪台是leader,那么他就拥有2888端口
  7. tcp 0 0 ::ffff:10.1.1.248:3888 :::* LISTEN 35016/java   

二、kafka集群搭建

1、配置文件

  1. [root@kafka1 opt]# cat /opt/kafka/config/server.properties | grep -v '^#'|grep -v '^$'
  2. broker.id=1
  3. listeners=PLAINTEXT://172.16.81.131:9092
  4. num.network.threads=3
  5. num.io.threads=8
  6. socket.send.buffer.bytes=102400
  7. socket.receive.buffer.bytes=102400
  8. socket.request.max.bytes=104857600
  9. log.dirs=/opt/kafka/data/kafka-logs
  10. num.partitions=10
  11. num.recovery.threads.per.data.dir=1
  12. offsets.topic.replication.factor=1
  13. transaction.state.log.replication.factor=1
  14. transaction.state.log.min.isr=1
  15. log.retention.hours=168
  16. log.segment.bytes=1073741824
  17. log.retention.check.interval.ms=300000
  18. zookeeper.connect=172.16.81.131:2181,172.16.81.132:2181
  19. zookeeper.connection.timeout.ms=6000
  20. group.initial.rebalance.delay.ms=0
  21. [root@kafka2 ~]# cat /opt/kafka/config/server.properties | grep -v '^#'|grep -v '^$'
  22. broker.id=2
  23. listeners=PLAINTEXT://172.16.81.132:9092
  24. num.network.threads=3
  25. num.io.threads=8
  26. socket.send.buffer.bytes=102400
  27. socket.receive.buffer.bytes=102400
  28. socket.request.max.bytes=104857600
  29. log.dirs=/opt/kafka/data/kafka-logs
  30. num.partitions=10
  31. num.recovery.threads.per.data.dir=1
  32. offsets.topic.replication.factor=1
  33. transaction.state.log.replication.factor=1
  34. transaction.state.log.min.isr=1
  35. log.retention.hours=168
  36. log.segment.bytes=1073741824
  37. log.retention.check.interval.ms=300000
  38. zookeeper.connect=172.16.81.131:2181,172.16.81.132:2181
  39. zookeeper.connection.timeout.ms=6000
  40. group.initial.rebalance.delay.ms=0
  41. #注意:broker.id不能相同

2、启动kafka集群

  1. /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties &

3、启动效果

  1. [root@kafka1 opt]# netstat -lntp
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp6 0 0 :::47457 :::* LISTEN 6582/java
  5. tcp6 0 0 172.16.81.131:9092 :::* LISTEN 9260/java
  6. tcp6 0 0 :::2181 :::* LISTEN 6582/java
  7. tcp6 0 0 :::33230 :::* LISTEN 9260/java
  8. tcp6 0 0 172.16.81.131:3888 :::* LISTEN 6582/java
  9. [root@kafka2 ~]# netstat -lntp
  10. Active Internet connections (only servers)
  11. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  12. tcp6 0 0 172.16.81.132:9092 :::* LISTEN 9395/java
  13. tcp6 0 0 :::42884 :::* LISTEN 6779/java
  14. tcp6 0 0 :::2181 :::* LISTEN 6779/java
  15. tcp6 0 0 172.16.81.132:2888 :::* LISTEN 6779/java
  16. tcp6 0 0 172.16.81.132:3888 :::* LISTEN 6779/java
  17. tcp6 0 0 :::38557 :::* LISTEN 9395/java

4、测试zookeeper和kafka是否正常

  1. (1)建立一个主题
  2. [root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic summer
  3. Created topic "summer".
  4. #注意:factor大小不能超过broker数,否则报错,当前集群broker值值为2
  5. (2)查看有哪些主题已经创建
  6. [root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --list --zookeeper 172.16.81.132:2181
  7. summer
  8. [root@kafka1 ~]# /opt/kafka/bin/kafka-topics.sh --list --zookeeper 172.16.81.131:2181
  9. summer
  10. (3)查看topic的详情
  11. [root@kafka2 ~]# /opt/kafka/bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic summer
  12. Topic:summer PartitionCount:1 ReplicationFactor:2 Configs:
  13. Topic: summer Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1
  14. #主题名称:summer
  15. #Partition:只有一个,从0开始
  16. #leader :id为2的broker
  17. #Replicas 副本存在于broker id为2,1的上面
  18. #Isr:活跃状态的broker
  19. (4)发送消息,这里使用的是生产者角色
  20. [root@kafka2 ~]# /bin/bash /opt/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic summer
  21. >Hello,wangyanlin
  22. >I am from china.
  23. >
  24. >
  25. >;
  26. >^C[root@kafka2 ~]#
  27. (5)接收消息,这里使用的是消费者角色
  28. [root@kafka2 ~]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic summer --from-beginning
  29. Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
  30. Hello,wangyanlin
  31. I am from china.
  32.  
  33. ;
  34.  
  35. ^CProcessed a total of 5 messages
  36. [root@kafka1 kafka]# /opt/kafka/bin/kafka-console-consumer.sh --zookeeper 172.16.81.132:2181 --topic summer --from-beginning
  37. Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
  38. Hello,wangyanlin
  39. I am from china.
  40.  
  41. ;
  42. ^CProcessed a total of 5 messages
  43. (6)删除消费主题
  44. /opt/kafka/bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic summer
  45. 开启conf里面的 delete.topic.enable改成true
  46. #测试正常!!完成!  

测试kafka集群能正常接收消费信息和消费信息!! 

后续将发布配置logstash日志收集和过滤,还有kibana图形化展示。

Kafka+Zookeeper集群搭建的更多相关文章

  1. 【转】kafka&zookeeper集群搭建指南

    [转自]:http://www.cnblogs.com/luotianshuai/p/5206662.html 待续...

  2. kafka+zookeeper集群

    参考:  kafka中文文档   快速搭建kafka+zookeeper高可用集群   kafka+zookeeper集群搭建 kafka+zookeeper集群部署 kafka集群部署   kafk ...

  3. ELK+zookeeper+kafka+rsyslog集群搭建

    前言 环境困境: 1.开发人员无法登陆服务器 2.各系统都有日志,日志数据分散难以查找 3.日志数据量大,查询忙,不能实时 环境要求: 1.日志需要标准化   集群流程图:   角色:   软件: 以 ...

  4. Kafka学习之(五)搭建kafka集群之Zookeeper集群搭建

    Zookeeper是一种在分布式系统中被广泛用来作为:分布式状态管理.分布式协调管理.分布式配置管理.和分布式锁服务的集群.kafka增加和减少服务器都会在Zookeeper节点上触发相应的事件kaf ...

  5. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  6. Zookeeper集群搭建及原理

    1 概述 1.1 简介 ZooKeeper 是 Apache 的一个顶级项目,为分布式应用提供高效.高可用的分布式协调服务,提供了诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知和分布式锁等分 ...

  7. 分布式架构中一致性解决方案——Zookeeper集群搭建

    当我们的项目在不知不觉中做大了之后,各种问题就出来了,真jb头疼,比如性能,业务系统的并行计算的一致性协调问题,比如分布式架构的事务问题, 我们需要多台机器共同commit事务,经典的案例当然是银行转 ...

  8. 分布式协调服务Zookeeper集群搭建

    分布式协调服务Zookeeper集群搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装jdk环境 1>.操作环境 [root@node101.yinzhengjie ...

  9. Zookeeper 集群搭建--单机伪分布式集群

    一. zk集群,主从节点,心跳机制(选举模式) 二.Zookeeper集群搭建注意点 1.配置数据文件 myid 1/2/3 对应 server.1/2/3 2.通过./zkCli.sh -serve ...

随机推荐

  1. hash_equals()函数

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/92 了解下hash_equals的概念: bool hash_e ...

  2. 重启网络服务时 Bringing up interface eth0

    重启网络服务时报错:  Bringing up interface eth0: Error:Connection activation failed:Device not managed by Net ...

  3. IT服务(运维)管理实施的几个要点--第二章 人员和组织架构

    子曰"没有合适的人" 在流程化的管理模式下,最容易步入的一个误区是按流程设计一个"理想的"组织架构,然后对应于这个架构对人员进行评估.培养,甚至是更换.我见过很 ...

  4. Web API系列之三 基本功能实现

    Web API系列之二讲解了如何搭建一个WebApi的基架,本文主要在其基础之上实现基本的功能.下面开始逐步操作: 一.配置WebApi的路由-用于配置外部如何访问内部资源的url的规则 1.添加Gl ...

  5. maven jar包冲三种解决方式

    初次启动应用,一直包如下错误,起初怀疑引入pandora 版本冲突. Exception in thread "main" java.lang.NoSuchMethodError: ...

  6. Android破解学习之路(六)——Android游戏 方块冒险 破解

    前言: 可能大家看到标题会有些懵逼,以为我发错了,这应该是五才对吧,其实,五我已经发了,不过被管理大大移出首页了,不知道这一篇是不是也会是同样的命运.. 今天所写的是关于支付宝内购的破解 原版 链接: ...

  7. 深入理解 React JS 中的 setState

    此文主要探讨了 React JS 中的 setState 背后的机制,供深入学习 React 研究之用. 在课程 React.js入门基础与案例开发 中,有些同学会发现 React JS 中的 set ...

  8. javascript中name,value等属于保留字

    前几天在练习js代码的时候,碰到了一个坑,这是让人醉了. html代码如下: <div> <div> <!--输入 123456--> <lable>请 ...

  9. ASP.NET MVC 5使用Swagger生成API文档

    一.安装 新建一个没有身份验证的mvc项目 - SwaggerMvc5Demo,然后添加一个名为Remote(自定义)且包含基础读写(不想手写)的ApiController   开源地址:https: ...

  10. sql server 权限

    -----是否存在有效的登录账号:是否被禁用,sql login还有:密码是否过期,是否被锁定 select is_disabled, loginproperty(name,'Isexpired') ...