Kafka的实践和使用

kafka作为一个分布式的流处理平台 在实际的项目中有这广泛的应用 而其可以用于两大类别的应用分类

  1. 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
  2. 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topictopic之间内部进行变化)

这里我们以php作为后端语言为例 引入kafka来解决一些实际问题

PHP引入kafka

本地环境为mac环境
首先通过brew安装工具

1
$ brew install kafka

安装的同时会自动安装依赖zookeeper

而在安装kafka的扩展之前,在安装php-rdkafka之前,需要先安装librdkafka

1
2
3
4
$ git clone https://github.com/edenhill/librdkafka.git
$ cd  librdkafka
$ ./configure
$ make && make install

开始安装kafka扩展

1
2
3
4
5
$ git clone https://github.com/arnaud-lb/php-rdkafka.git
$ cd php-rdkafka
$ phpize
$ ./configure  --with-php-config=/usr/local/php/bin/php-config  ###你安装的php下的php-config路径
$ make && make install

编译完成之后再php.ini中加入扩展 extension=rdkafaka.so

kafka启动执行

进入mac环境下的kafka编译后的目录 可以看到kafkazookeeper的配置文件 server.proprtieszookeeper.properties
1

启动zookeeper

1
$ zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties

1
启动服务后 端口是绑定到了2181端口

启动kafaka
进入服务的文件目录 可以看到关于kafka的一些命令列表 其中包含了镜像管理和日志管理
1

1
$ kafka-server-start /usr/local/etc/kafka/server.properties

其实有关kafka的基本概念可以查看其官方文档的一些说明

在这里为了测试可以先创建一个topic 当然可以先看一下所有的topics

1
$ kafka-topics --list --zookeeper localhost:2181

1
让我们创建一个名为“test”topic,它有3个分区和1个副本

1
$ kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic test

再次查看所有topics信息
1

查看刚创建的话题信息
1

启动生产者

1
$ kafka-console-producer --broker-list localhost:9092 --topic test

这里的9092是kafaka的端口地址 并非zookeeper端口地址

启动消费者

1
$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

这里的from-beginning 表示信息每次都会从头开始读取

这里只是设置了单个服务 作为一个分布式处理平台 可以设置多个代理
1

这里是另外两个服务的配置信息 也就是kafka的配置文件的信息

1
2
3
4
5
6
7
8
9
10
11
server-1.properties:
broker.id=1
zookeeper.connect=localhost:2181
listeners=PLAINTEXT://:9093
log.dir=/usr/local/var/lib/kafka-logs-1

server-2.properties:
broker.id=2
zookeeper.connect=localhost:2181
listeners=PLAINTEXT://:9094
log.dir=/usr/local/var/lib/kafka-logs-2

这样的话去启动其他两个新的节点

1
2
$ bin  kafka-server-start /usr/local/etc/kafka/server-1.properties
$ bin kafka-server-start /usr/local/etc/kafka/server-2.properties

现在创建副本为3的新topic

1
$ kafka-topics --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-topic

现在已经有了一个集群 查看代理情况
1

值得注意的是:
“leader”是负责给定分区所有读写操作的节点。每个节点都是随机选择的部分分区的领导者。
“replicas”是复制分区日志的节点列表,不管这些节点是leader还是仅仅活着。
“isr”是一组“同步”replicas,是replicas列表的子集,它活着并被指到leader

相关链接

Kafka 中文文档 - ApacheCN
Apache Kafka