中间件-kafka

kafka

名词解释:
偏移量offsets:Offset专指Partition以及User Group而言,记录某个user group在某个partiton中当前已经消费到达的位置
Producer:负责发布消息到Kafka broker
Consumer:消息消费者,向Kafka broker读取消息的客户端
Consumer Group:每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则会创建默认的group)
共享一个公共的ID,即group ID。组内的所有消费者协调在一起来消费订阅主题(subscribed topics)的所有分区(partition)。当然,每个分区只能由同一个消费组内的一个consumer来消费
分区parttitons:Parition是物理上的概念,每个Topic包含一个或多个Partition。是Kafka下数据存储的基本单元。同一个topic的数据,会被分散的存储到多个
partition中,这些partition可以在同一台机器上,也可以是在多台机器上。为了做到均匀分布,通常partition的数量通常是Broker Server数量的整数倍
副本集replication: 指定了副本数(集群参数,保证高可用,单节点不能设置大于1,和es类型思想)
Broker:Kafka集群包含一个或多个服务器,这种服务器被称为broker,指服务于Kafka的一个node,负责消息的存储转发,并对外提供服务
topic:可以理解为是一个queue序列,每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic
Lag:延迟,延迟表示为分区头后面的 Offset 数量

安装jdk
Kafka是依赖Java环境运行,所以需要在Linux系统内安装Java环境。
yum -y install java java-1.8.0-openjdk-devel

安装zookeeper
也可以使用Kafka自带的ZK
下载:https://zookeeper.apache.org/releases.html 或者wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
cd .. && ln -s zookeeper-3.4.10 zookeeper
cd zookeeper/conf/ && cp zoo_sample.cfg zoo.cfg
vim zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
server.1=ZooKeeper-Kafka-01:2888:3888
server.2=ZooKeeper-Kafka-02:2888:3888
server.3=ZooKeeper-Kafka-03:2888:3888
创建dataDir目录创建/tmp/zookeeper
mkdir /tmp/zookeeper && touch /tmp/zookeeper/myid
echo 1 > /tmp/zookeeper/myid
将zookeeper文件复制到另外两个节点
scp -r zookeeper-3.4.10/ 10.200.3.86:/usr/local/
scp -r zookeeper-3.4.10/ 10.200.3.87:/usr/local/
在两个slave节点创建目录和文件
ln -s zookeeper-3.4.10 zookeeper
mkdir /tmp/zookeeper
touch /tmp/zookeeper/myid
echo 2 > /tmp/zookeeper/myid
启动zookeeper
./bin/zkServer.sh start
状态查看:
./bin/zkServer.sh status

安装kafka
wget http://labfile.oss.aliyuncs.com/courses/859/kafka_2.10-0.10.2.1.tgz
tar -zxvf kafka_2.10-0.10.2.1.tgz -C /usr/local/
cd .. && ln -s kafka_2.12-1.1.0 kafka
vim config/server.properties
# master为0
broker.id=0
listeners=PLAINTEXT://ZooKeeper-Kafka-01:9092
advertised.listeners=PLAINTEXT://ZooKeeper-Kafka-01:9092
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=5
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
log.retention.hours=24
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
# 连接
zookeeper.connect=ZooKeeper-Kafka-01:2181,ZooKeeper-Kafka-02:2181,ZooKeeper-Kafka-03:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
# 可删除topic
delete.topic.enable=true

将 kafka_2.12-1.1.0 文件夹复制到另外两个节点下
scp -r kafka_2.12-1.1.0/ 10.200.3.86:/usr/local/
scp -r kafka_2.12-1.1.0/ 10.200.3.87:/usr/local/
修改每个节点对应的 server.properties 文件的 broker.id和listenrs
cat server.properties
broker.id=1
listeners=PLAINTEXT://ZooKeeper-Kafka-02:9092
advertised.listeners=PLAINTEXT://ZooKeeper-Kafka-02:9092

cat server.properties
broker.id=2
listeners=PLAINTEXT://ZooKeeper-Kafka-03:9092
advertised.listeners=PLAINTEXT://ZooKeeper-Kafka-03:9092

启动脚本
bin/kafka-server-start.sh config/server.properties &
关闭kafka
bin/kafka-server-stop.sh

管理工具kafka-manager安装:
下载:https://github.com/yahoo/kafka-manager/releases
wget https://github.com/yahoo/kafka-manager/archive/1.3.3.18.zip
mv 1.3.3.18.zip kafka-manager-1.3.3.18.zip
unzip kafka-manager-1.3.3.18.zip -d /opt/module/

sbt编译工具安装
curl https://bintray.com/sbt/rpm/rpm > bintray-sbt-rpm.repo
mv bintray-sbt-rpm.repo /etc/yum.repos.d/
yum install sbt
检查:sbt-version

编译kafka-manager(时间较长)
sbt clean dist

vi conf/application.conf
修改kafka-manager.zkhosts列表为自己的zk节点
kafka-manager.zkhosts="node21:2181,node22:2181,node23:2181"

启动服务:
顺序:启动zk集群,kafka集群,再启动kafka-manager服务
nohup bin/kafka-manager -Dconfig.file=conf/application.conf -Dhttp.port=8080 &
查看进程:jps

web配置:
点击【Cluster】>【Add Cluster】打开如下添加集群配置界面:输入集群的名字(如Kafka-Cluster-1)和 Zookeeper 服务器地址(如localhost:2181),选择最接近的Kafka版本
其他broker的配置可以根据自己需要进行配置,默认情况下,点击【保存】时,会提示几个默认值为1的配置错误,需要配置为>=2的值


kafka优化:
启动内存优化
vim kafka-server-start.sh
KAFKA_HEAP_OPTS="-Xmx10G -Xms 5G"

常用操作:
创建topic
bin/kafka-topics.sh --create --zookeeper ZooKeeper-Kafka-01:2181, ZooKeeper-Kafka-02:2181, ZooKeeper-Kafka-03:2181 --replication-factor 3 --partitions 3 --topic test
–partitions:指定了分区个数
–replication-factor:指定了副本数(集群参数,保证高可用,单节点不能设置大于1,和es类型思想)
–topic:指定了所要创建主题的名称
–zookeeper:指定了Kafka所连接的Zookeeper服务地址
–create:创建主题的动作指
显示topic
bin/kafka-topics.sh --describe --zookeeper ZooKeeper-Kafka-01:2181, ZooKeeper-Kafka-02:2181, ZooKeeper-Kafka-03:2181 --topic test
列出所有topic
bin/kafka-topics.sh --list --zookeeper ZooKeeper-Kafka-01:2181, ZooKeeper-Kafka-02:2181, ZooKeeper-Kafka-03:2181
删除 topic
bin/kafka-topics.sh --delete --zookeeper ZooKeeper-Kafka-01:2181, ZooKeeper-Kafka-02:2181, ZooKeeper-Kafka-03:2181 --topic test

创建 producer(生产者), 在master节点上 测试生产消息
bin/kafka-console-producer.sh --broker-list ZooKeeper-Kafka-01:9092 -topic test
创建 consumer(消费者):在ZooKeeper-Kafka-02节点上 测试消费
./kafka-console-consumer.sh --bootstrap-server ZooKeeper-Kafka-01:9092 --topic test
–bootstrap-server 指定了连接Kafka集群的地址
–topic 指定了消费端订阅的主题
查看消费者组
bin/kafka-consumer-groups.sh --zookeeper bigdata111:2181 --group console-consumer-30191 --describe
查看指定消费者组
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group
查看更多的消费组信息
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group my-group --members
--members: 查看消费者组中活跃的消费者
--members --verbose: 该参数还可以查看分配给每个成员的分区
--offsets: 该参数实际上可以被--describe参数中的内容覆盖掉
--state: 该参数可以提供组级别的信息--delete: 该参数可以手动删除一个或多个消费者组
-reset-offsets: 该参数用于重置消费者组的偏移量,此选项在同一时间支持一个消费者组,同时需要使用--all-topics或--topic指定范围
注意: --reset-offsets选项支持如下三个执行选项
显示要重置的偏移量,--execute: 执行--reset-offsets进程,--export: 以csv格式导出执行结果
还有如下方案可供选择
--to-datetime: 重置offset到另外一个offset (format:YYYY-MM-DDTHH:mm:SS.sss)
--to-earliest: 重置offset到最早的offset
--to-latest: 重置为最新的offset--shift-by: 重置offset为n
--from-file: 重置到csv中定义的offset
--to-current: 重置offset到当前
--by-duration: 重置offset为当前时间( Format: 'PnDTnHnMnS')
--to-offset: 重置offset为指定的值

恢复已恢复副本的领导权:
bin/kafka-preferred-replica-election.sh --zookeeper zk_host:port/chroot
或者添加配置:auto.leader.rebalance.enable=true
设置消费者组的offset为最新
bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --reset-offsets --group consumergroup1 --topic topic1 --to-latest
# 最大offset
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test_topic --time -1
# 最小offset
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test_topic --time -2
# offset
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --topic test_topic11
修改topic(分区数、特殊配置如compact属性、数据保留时间等)
bin/kafka-topics.sh --zookeeper localhost:2181 --alter --partitions 3 --config cleanup.policy=compact --topic test_topic
或者 bin/kafka-configs.sh --alter --zookeeper localhost:2181 --entity-name test_topic --entity-type topics --add-config cleanup.policy=compact

查看topic消息内容

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicName --from-beginning

posted @ 2020-09-16 03:40  舍&得  阅读(273)  评论(0)    收藏  举报