Apache KafkaApache Kafka: A Distributed Streaming Platform.https://kafka.apache.org/downloads.html
将Kafka安装在/usr/local/kafka目录下,使用之前配置好的Zookeeper,并把消息日志保存在/tmp/kafka-logs目录下
tar -zxf kafka_2.12-3.1.1.tgz
mv kafka_2.12-3.1.1 /usr/local/kafka
mkdir /tmp/kafka-logs
启动kafka:
/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties
测试发布消息:
/usr/local/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看已有topic列表:
./kafka-topics.sh --list --zookeeper localhost:2181
查看在指定topic信息:
/usr/local/kafka/bin/kafka-topics.sh --zookeeper localhost:2181 --describe topic test
在较新版本(2.2 及更高版本)的 Kafka 不再需要 ZooKeeper 连接字符串,即- -zookeeper localhost:2181。使用 Kafka Broker的 --bootstrap-server localhost:9092来替代- -zookeeper localhost:2181。
java环境变量配置完 source /etc/profile 生效
较新版本使用下面命令:
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic test --partitions 1 --replication-factor 1
查看已有topic列表:
./kafka-topics.sh --list --bootstrap-server localhost:9092
查看指定topic信息:
/usr/local/kafka/bin/kafka-topics.sh --bootstrap-server localhost:9092 --describe topic test
往测试主题上发布消息:
/usr/local/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>test message 1
从测试主题上读取消息:
/usr/local/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
每个broker都需要一个标识符,使用broker.id表示,默认值为0,建议设置为与机器名有相关性的整数便于维护。
如果使用配置样本来启动kafka,会默认监听9092端口。可以修改port端口,注意使用1024以下端口,需要root权限启动kafka,不建议这么做。
用于保存broker元数据的zookeeper地址,localhost:2181表示这个zookeeper地址是运行在本地的2181上
在磁盘上存放消息的路径
配置处理日志片段的的线程池,所配置的数字对应的是log.dirs指定的单个日志目录,例如 num.recovery.threads.per.data.dis=8, log.dirs指定了三个目录,则需要24个线程。
是否自动创建topics主题,如果是通过手动显示创建,则可以设置为false
四 主题的默认配置
指定新创建的主题将包含多少个分区,如果启用了主题自动创建功能,主题分区的个数就是该参数指定的值,默认为1,要注意,我们可以增加分区的个数,但是不能减少分区的个数,所以,如果要让一个主题的分区个数少于num.partitions指定的值,需要手动创建该主题。
如果每秒要从主题读取和写入的数据为1GB,并且每个消费者每秒可以处理500MB的数据,那么至少需要20个分区。这样就可以让20个消费者同时去读取这些分区。从而达到每秒1GB的吞吐量。
根据配置时间来决定数据可以被保留多久,默认是168小时,也就是一周。
另一种方式是通过判断设置的字节数来决定消息过期时间,如果log.retention.ms时间且配置了 log.retention.bytes字节数,那么只要满足一个条件消息就会被删除,log.retention.bytes字节数作用在每个分区上,例如一个包含8个分区的主题log.retention.bytes被设置为1G,那么这个主题最多可以保留8G。
以上的设置都是作用在日志片段上,而不是作用在单个消息上。当消息到达broker时,它们会被追加到分区的当前日志片段上,当日志片段大小达到设置的上限(默认是1G),当前日志片段就会被关闭,就开始等待过期。日志片段在被关闭之前消息是不会过期的。如果log.retention.ms设置为1周,而10天才能填满当前日志片段,则消息过期时间最多需要17天才过期。
另一个可以控制日志片段关闭时间的参数,它指定了多长时间之后日志片段被关闭。
限制单个消息的大小,默认为1MB,指的是压缩后的大小。
vim server.properties
broker.id=1
port=9092
#内网ip
listeners=PLAINTEXT://0.0.0.0:9092
#公网ip
advertised.listeners=PLAINTEXT://36.135.128.61:9092
log.dirs=/home/kafka/kafka-logs/1
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
复制kafka:
cp -r kafka1 kafka2
vim server.properties
broker.id=2
port=9093
#内网ip
listeners=PLAINTEXT://0.0.0.0:9093
#公网ip
advertised.listeners=PLAINTEXT://36.135.128.61:9093
log.dirs=/home/kafka/kafka-logs/2
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
cp -r kafka1 kafka3
vim server.properties
broker.id=3
port=9094
#内网ip
listeners=PLAINTEXT://0.0.0.0:9094
#公网ip
advertised.listeners=PLAINTEXT://36.135.128.61:9094
log.dirs=/home/kafka/kafka-logs/3
zookeeper.connect=localhost:2181,localhost:2182,localhost:2183
启动kfka:
./kafka-server-start.sh -daemon ../config/server.properties &