一、安装Brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
- 查看帮助文档
man brew
- 卸载brew命令 (暂时用不到,先mark一下)
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
二、kafka的安装
2.1 brew安装
brew install kafka
由于kafka依赖zookeeper,所以安装的时候会安装zookeeper
====== 对目录不感兴趣的直接跳到启动zk ======
2.2 查看安装 Kafka 目录
brew list kafka
默认在/usr/local/Cellar/kafka/ 下面,可以看到zk和kafka的各个start和stop命令都在这里面。
localhost:kafka mtdp$ brew list kafka
/usr/local/Cellar/kafka/2.3.1/.bottle/etc/ (14 files)
/usr/local/Cellar/kafka/2.3.1/bin/connect-distributed
/usr/local/Cellar/kafka/2.3.1/bin/connect-standalone
/usr/local/Cellar/kafka/2.3.1/bin/kafka-acls
/usr/local/Cellar/kafka/2.3.1/bin/kafka-broker-api-versions
/usr/local/Cellar/kafka/2.3.1/bin/kafka-configs
/usr/local/Cellar/kafka/2.3.1/bin/kafka-console-consumer
/usr/local/Cellar/kafka/2.3.1/bin/kafka-console-producer
/usr/local/Cellar/kafka/2.3.1/bin/kafka-consumer-groups
/usr/local/Cellar/kafka/2.3.1/bin/kafka-consumer-perf-test
/usr/local/Cellar/kafka/2.3.1/bin/kafka-delegation-tokens
/usr/local/Cellar/kafka/2.3.1/bin/kafka-delete-records
/usr/local/Cellar/kafka/2.3.1/bin/kafka-dump-log
/usr/local/Cellar/kafka/2.3.1/bin/kafka-log-dirs
/usr/local/Cellar/kafka/2.3.1/bin/kafka-mirror-maker
/usr/local/Cellar/kafka/2.3.1/bin/kafka-preferred-replica-election
/usr/local/Cellar/kafka/2.3.1/bin/kafka-producer-perf-test
/usr/local/Cellar/kafka/2.3.1/bin/kafka-reassign-partitions
/usr/local/Cellar/kafka/2.3.1/bin/kafka-replica-verification
/usr/local/Cellar/kafka/2.3.1/bin/kafka-run-class
/usr/local/Cellar/kafka/2.3.1/bin/kafka-server-start
/usr/local/Cellar/kafka/2.3.1/bin/kafka-server-stop
/usr/local/Cellar/kafka/2.3.1/bin/kafka-streams-application-reset
/usr/local/Cellar/kafka/2.3.1/bin/kafka-topics
/usr/local/Cellar/kafka/2.3.1/bin/kafka-verifiable-consumer
/usr/local/Cellar/kafka/2.3.1/bin/kafka-verifiable-producer
/usr/local/Cellar/kafka/2.3.1/bin/trogdor
/usr/local/Cellar/kafka/2.3.1/bin/zookeeper-security-migration
/usr/local/Cellar/kafka/2.3.1/bin/zookeeper-server-start
/usr/local/Cellar/kafka/2.3.1/bin/zookeeper-server-stop
/usr/local/Cellar/kafka/2.3.1/bin/zookeeper-shell
/usr/local/Cellar/kafka/2.3.1/homebrew.mxcl.kafka.plist
/usr/local/Cellar/kafka/2.3.1/libexec/bin/ (30 files)
/usr/local/Cellar/kafka/2.3.1/libexec/libs/ (92 files)
/usr/local/Cellar/kafka/2.3.1/libexec/logs/ (23 files)
2.3 maven repository查看kafka版本
- 进入 /usr/local/Cellar/kafka/2.3.1/libexec/libs 进行ls
localhost:libs mtdp$ pwd
/usr/local/Cellar/kafka/2.3.1/libexec/libs
localhost:libs mtdp$ ls
kafka_2.12-2.3.1.jar ...
可以看到 kafka_2.12-2.3.1.jar
2.3.1 Maven仓库
- 关于 kafka_2.12-2.3.1.jar
maven repository
可以在仓库内找到 https://mvnrepository.com/artifact/org.apache.kafka/kafka_2.12/2.3.1
<!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka -->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.12</artifactId>
<version>2.3.1</version>
</dependency>
2.3.2 Scale版本与 Kafka版本
- 关于kafka后面的 2.11/2.12 (Scala编译器版本)
2.11/2.12代表着Kafka源代码的Scala编译器版本,Kafka服务器端代码完全由Scala语音编写,说到Scala就提两句,Scala与Java相同都是JVM系的语言,它同时支持面向对象和函数式编程。
Java的新功能, 也在慢慢的向着Scala进行靠近,例如Lambda表达式,函数式接口,val变量等
但Kafka新版客户端代码完全由Java语言编写,当然,不是Scala不行了,而是社区找来了一批Java程序员而已,而之前的Scala程序员隐退罢了
- Kafka真正的版本号 2.3.0
其中2代表着大版本号,即Major Version
中间的3代表着小版本号或次版本号,即Minor Version
最后的0代表着修订版本号或补丁,也就是Patch号
Kafka社区在发不了1.0.0版本后,特意写了一篇文章,宣布Kafka版本命名规则从4位演进到3位,比如0.11.0.0版本就是4位版本号
三、启动服务
3.1 临时启动
- 先启动 ZK
zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties &
- 再启动kafka
kafka-server-start /usr/local/etc/kafka/server.properties &
3.2 使用 brew 开机自启动
- 先启动 ZK
brew services start zookeeper
- 再启动kafka
brew services start kafka
如果出现报错
Error: Unknown command: services
使用 services 指令,请先安装
> brew tap gapple/services
> curl -o /usr/local/bin/brew-services.rb https://gist.githubusercontent.com/lwe/766293/raw/75a7907004bbff0eb3b072d1d951be2cfe7e5020/brew-services.rb
> chmod +x /usr/local/bin/brew-services.rb
> brew services help
但是当安装完之后使用如果出现下面的问题:
$ brew services start zookeeper
Error: undefined method `resolve_alias' for Formula:Class
/usr/local/bin/brew-services.rb:154:in `service'
/usr/local/bin/brew-services.rb:203:in `check'
/usr/local/bin/brew-services.rb:193:in `run!'
/usr/local/bin/brew-services.rb:397:in `<top (required)>'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/vendor/portable-ruby/2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/usr/local/Homebrew/Library/Homebrew/utils.rb:82:in `require?'
/usr/local/Homebrew/Library/Homebrew/brew.rb:108:in `<main>'
请尝试下面的方法:
1.删除/usr/local/bin/brew-services.rb文件
2.执行 brew update 和 brew upgrade 命令
3.brew services list 查看是否可以正确使用
检测 brew service是否正常,下面这显示表示正常了
$ brew services list
Name Status User Plist
kafka stopped
mysql@5.7 stopped
redis stopped
zookeeper stopped
四、create 创建topic
单个分区 Partition 和只有一个副本 Replica 创建一个名为“test”的主题Topic
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
容易出现单点故障,这个后续文章会讲解。
五、list 查看创建的topic
kafka-topics --list --zookeeper localhost:2181
六、Producer 发送消息
Kafka提供了一个命令行客户端,它将从文件或标准输入接收输入,并将其作为消息发送到Kafka集群。默认情况下,每行都将作为单独的消息发送。
运行生产者,然后在控制台中键入一些消息发送到服务器。
kafka-console-producer --broker-list localhost:9092 --topic test
七、Consumer 消费消息
7.1 单消费者消费
kafka-console-consumer --bootstrap-server localhost:9092 --topic test --from-beginning
- 解释一下参数 --from-beginning
新加入的消费者可以选择的消费起始点offset :
- 从最开始,也就是from-beginning (消费存量 + 增量)
- 从此刻。(消费增量)
7.2 指定消费者组消费
- 解释一下消费者组:
一个组group下面可以挂多个消费者,然后进行抢占式消费,比如group-A下挂了 Consumer1 + Consumer2 + Consumer3,那么生产者Producer生产一条消息,只有会被一个消费者消费到,这样的好处是,当生产的消息量增大时,可以通过扩容增加组内Consumer的数量来增加吞吐量,等消息量过少时,可以通过缩容减少组内Consumer数量来减少资源浪费。
kafka-console-consumer --bootstrap-server localhost:9092 --topic testCluster --group test-group
其他关于消费者组的设置,在第三章会具体讲解。
八、关闭服务
服务关闭的顺序是先kafka,然后zookeeper
- brew形式关闭
# kafka关闭
brew services stop kafka
# zk关闭
brew services stop zookeeper
- 命令行关闭
# kafka关闭
/usr/local/Cellar/kafka/2.3.1/bin/kafka-server-stop
# zk关闭
/usr/local/Cellar/kafka/2.3.1/bin/zookeeper-server-stop