kafka简介,集群部署

1、Kafka是什么
    在流式计算中,Kafka一般用来缓存数据,Storm通过消费Kafka的数据进行计算。
     Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
     Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时    数    据提供一个统一、高通量、低等待的平台。
     Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它    并不是JMS规范的实现。
     Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。

     无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性

2、Kafka的核心组件

    kafka集群中的服务器都叫做broker
   kafka有两类客户端,一类叫producer(消息生产者),一类叫做consumer(消息消费者),客户端和broker服务器之间采用tcp协议连接
kafka中不同业务系统的消息可以通过topic进行区分,而且每一个消息topic都会被分区,以分担消息读写的负载
每一个分区都可以有多个副本,以防止数据的丢失
某一个分区中的数据如果需要更新,都必须通过该分区所有副本中的leader来更新
消费者可以分组,比如有两个消费者组A和B,共同消费一个topic:order_info,A和B所消费的消息不会重复
比如 order_info 中有100个消息,每个消息有一个id,编号从0-99,那么,如果A组消费0-49号,B组就消费50-99号
消费者在具体消费某个topic中的消息时,可以指定起始偏移量

3 ,kafka 集群部署 (这里我们搞三台)

        下载安装包、解压安装包、修改配置文件、分发安装包、启动集群

所有oracle分布式框架几乎都用到zookeeper,这里不解释,之前文档有介绍,自己在三台机器上分别配置并启动zookeeper 

1、解压kafka安装包 ,不解释自己弄
2、修改server.properties  (在安装目录的config文件夹下面,自己找)
broker.id=1  (在每台分别配置对应的id, 如 weekend01上配置broker.id=1,  weekend02配置 broker.id=2,  week......)

将如下配置覆盖原来server.properties配置即可

#broker的全局唯一编号,不能重复
broker.id=0

#用来监听链接的端口,producer或consumer将在此端口建立连接
port=9092

#处理网络请求的线程数量
num.network.threads=3

#用来处理磁盘IO的线程数量
num.io.threads=8

#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400

#接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400

#请求套接字的缓冲区大小
socket.request.max.bytes=104857600

#kafka运行日志存放的路径
log.dirs=/export/servers/logs/kafka

#topic在当前broker上的分片个数
num.partitions=2

#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1

#segment文件保留的最长时间,超时将被删除
log.retention.hours=168

#滚动生成新的segment文件的最大时间
log.roll.hours=168

#日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824

#周期性检查文件大小的时间
log.retention.check.interval.ms=300000

#日志清理是否打开
log.cleaner.enable=true

#broker需要使用zookeeper保存meta数据
zookeeper.connect=weekend01:2181,weekend02:2181,weekend03:2181

#zookeeper链接超时时间
zookeeper.connection.timeout.ms=6000

#partion buffer中,消息的条数达到阈值,将触发flush到磁盘
log.flush.interval.messages=10000

#消息buffer的时间,达到阈值,将触发flush到磁盘
log.flush.interval.ms=3000

#删除topic需要server.properties中设置delete.topic.enable=true否则只是标记删除
delete.topic.enable=true

#此处的host.name为本机IP(重要),如果不改,则客户端会抛出:Producer connection to localhost:9092 unsuccessful 错误!
host.name=weekend01
advertised.host.name=192.168.2.101


3、将zookeeper集群启动

4、在每一台节点上启动broker
bin/kafka-server-start.sh config/server.properties

5、在kafka集群中创建一个topic
bin/kafka-topics.sh --create --zookeeper weekend01:2181 --replication-factor 3 --partitions 1 --topic my-order
bin/kafka-topics.sh --list --zookeeper weekend01:2181  查看topic

6、用一个producer向某一个topic中写入消息
bin/kafka-console-producer.sh --broker-list weekend01:9092 --topic my-order

7、用一个comsumer从某一个topic中读取信息
bin/kafka-console-consumer.sh --zookeeper weekend01:2181 --from-beginning --topic my-order

8、查看一个topic的分区及副本状态信息

bin/kafka-topics.sh --describe --zookeeper weekend01:2181 --topic my-order

在启动提供者进程下面 随便输入点东西, 去消费者进程下面便可以看到了 。

最后我们通过代码和图的关系解释下 borker , topic ,消息分区,分区副本四者关系 :

再创建一个提供者然后查看状态信息 : 

可以看到,我们将消息分了 2 个区, 每个区有 3 个副本 ,topic名字叫做 mysons , 分区副本位于不同broker, 并指出了同一分区副本leader所在服务器位置。

画个图片解释下: 

最后看下他的容错能力,我们把borker.0服务器 进程杀死 , ( kill -9 进程号),看下原本再broker.0上的 part0, leader是否会自动转移到 broker.1或者 broker.2的part区副本上, 答案是肯定的,经我测试如图

好了,基本常用到且需理解的kafka概念其实也就这些,有什么需要补充的请大家评论下,谢谢!

### 如何在本地环境中搭建和配置Kafka集群 #### 使用Docker和Docker Compose简化部署流程 为了方便快捷地构建Kafka集群,推荐采用Docker容器化技术以及Docker Compose编排工具。这种方式不仅能够快速创建多节点的Kafka实例,还便于管理各个组件之间的依赖关系[^1]。 #### 准备工作 确保已安装好Docker Engine及Docker Compose插件,并熟悉基本操作指令。接着下载官方提供的`docker-compose.yml`文件作为模板,该文件定义了ZooKeeper与多个Kafka broker的服务描述信息。 #### 编写docker-compose.yml文件 下面是一个简单的YAML配置示例用于启动三个Broker组成的Kafka集群: ```yaml version: '2' services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka1: image: wurstmeister/kafka depends_on: - zookeeper environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ports: - "9092:9092" kafka2: image: wurstmeister/kafka depends_on: - zookeeper environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9093 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ports: - "9093:9093" kafka3: image: wurstmeister/kafka depends_on: - zookeeper environment: KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9094 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ports: - "9094:9094" ``` #### 启动Kafka集群 保存上述内容到名为`docker-compose.yml`的文件中,打开终端并切换至此目录下执行如下命令即可一键拉取镜像并启动整个集群环境: ```bash docker-compose up -d ``` 此时应该可以看到五个新的容器被成功创建出来,其中包括一个ZooKeeper服务器加上三个独立运行着不同端口监听地址(Kafka Broker) 的服务进程。 对于非Docker方式的手动安装,则需先获取Apache Kafka二进制包解压后按照指定路径修改相应参数设置完成初始化动作;之后利用shell脚本批量开启各节点上的守护进程[^3][^4]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值