日志-kafka
介绍
写于2021.6.30
Apache Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一种快速、可扩展的、设计内在就是分布式的,分区的和可复制的提交日志服务。
Apache Kafka与传统消息系统相比,有以下不同:
它被设计为一个分布式系统,易于向外扩展;
它同时为发布和订阅提供高吞吐量;
它支持多订阅者,当失败时能自动平衡消费者;
它将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。
一、 误区澄清与概念明确
1 Kafka的版本
很多人在Kafka中国社区(替群主做个宣传,QQ号:162272557)提问时的开头经常是这样的:“我使用的kafka版本是2.10/2.11, 现在碰到一个奇怪的问题。。。。” 无意冒犯,但这里的2.10/2.11不是kafka的版本,而是编译kafka的Scala版本。Kafka的server端代码是由Scala语言编写的,目前Scala主流的3个版本分别是2.10、2.11和2.12。实际上Kafka现在每个PULL request都已经自动增加了这三个版本的检查。下图是我的一个PULL request,可以看到这个fix会同时使用3个scala版本做编译检查:

目前广泛使用kafka的版本应该是这三个大版本:0.8.x, 0.9.x和0.10.* 。 这三个版本对于consumer和consumer group来说都有很大的变化,我们后面会详谈。
2 新版本 VS 老版本
“我的kafkaoffsetmonitor为什么无法监控到offset了?”——这是我在Kafka中国社区见到最多的问题,没有之一!实际上,Kafka 0.9开始提供了新版本的consumer及consumer group,位移的管理与保存机制发生了很大的变化——新版本consumer默认将不再保存位移到zookeeper中,而目前kafkaoffsetmonitor还没有应对这种变化(虽然已经有很多人在要求他们改了,详见https://github.com/quantifind/KafkaOffsetMonitor/issues/79),所以很有可能是因为你使用了新版本的consumer才无法看到的。关于新旧版本,这里统一说明一下:kafka0.9以前的consumer是使用Scala编写的,包名结构是kafka.consumer.*,分为high-level consumer和low-level consumer两种。我们熟知的ConsumerConnector、ZookeeperConsumerConnector以及SimpleConsumer就是这个版本提供的;自0.9版本开始,Kafka提供了java版本的consumer,包名结构是o.a.k.clients.consumer.*,熟知的类包括KafkaConsumer和ConsumerRecord等。新版本的consumer可以单独部署,不再需要依赖server端的代码。
原文:https://www.cnblogs.com/huxi2b/p/6223228.html
二,名词介绍
Broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker。
Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。(物理上不同 Topic 的消息分开存储,逻辑上一个 Topic 的消息虽然保存于一个或多个 broker 上,但用户只需指定消息的 Topic 即可生产或消费数据而不必关心数据存于何处)。
Partition:Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition。
Producer:负责发布消息到 Kafka broker。
Consumer:消息消费者,向 Kafka broker 读取消息的客户端。
Consumer Group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)。
对于消费者,kafka中有两个设置的地方:对于老的消费者,由--zookeeper参数设置;对于新的消费者,由--bootstrap-server参数设置
如果使用了--zookeeper参数,那么consumer的信息将会存放在zk之中
查看的方法是使用./zookeeper-client,然后 ls /consumers/[group_id]/offsets/[topic]/[broker_id-part_id],这个是查看某个group_id的某个topic的offset
如果使用了--bootstrap-server参数,那么consumer的信息将会存放在kafka之中
对于console生产者,--broker-list参数指定了所使用的broker
参考 Kafka bootstrap-servers vs zookeeper in kafka-console-consumer 中说建议使用新版(新版本指的是kafka 0.8.0之后的版本)的 --bootstrap-server
三,关于kafka和zookeeper
原因:主要有两个目的/动机:一是优化元数据管理,原来的zk方案,极端情况下可能会造成数据不一致;二是简化部署和配置
Kafka2.8版本开始,可以不用Apache Zookeeper来作为Kafka的依赖组件了,官网把这种称之为KRaft模式。目前,Kafka使用Zookeeper来存储有关分区和Broker的元数据,并选择一个Broker作为Kafka的Controller。现在官网打算删除对Zookeeper的依赖,让Kafka能够以更具扩展性和更加强大的方式管理元数据,从而支持更多分区。

KRaft目前在Kafka2.8版本是一个测试版本,KRaft模式不推荐使用到生产环境。当Kafka集群处理KRaft模式时,它不会将其元数据存储在Zookeeper中,实际上根本不需要运行Zookeeper,因为它将元数据存储在Controller节点中。
目前官网退出的KRaft模式仅用于测试,不推荐使用到生产环境,因为官方还不支持将现有的基于Zookeeper的Kafka集群升级到KRaft模式。实际上,当Kafka3.0发布时,无法将Kafka集群从2.8升级到3.0,目前该模式会有些BUG,如果尝试KRaft使用到生产环境,会存在数据丢失的风险。
可参考:https://zhuanlan.zhihu.com/p/369398193
以及https://www.cnblogs.com/smartloli/p/14722529.html
本文以Kafka 单节点单Broker部署及使用 做为演示

一,下载及安装
需要先安装zookeeper
安装教程参考:1.https://darren.gitbook.io/project/devops/zookeeper-an-zhuang-ji-shi-yong
2.https://www.cnblogs.com/wang-hongwei/p/14700178.html
下载 http://kafka.apache.org/downloads.html
步骤如下:
二,修改配置
修改server.properties(/usr/local/kafka/config/server.properties)
三,启动
测试及使用
创建 topic
使用 kafka-topics.sh 创建单分区单副本的 topic test:
查看 topic 列表:
查看分片情况
/app/kafka/kafka_2.12-2.1.0/bin/kafka-topics.sh --describe --zookeeper 192.168.40.148:2181
对应topic存储的数据:
生产消费测试 Kafka系列:生产消费消息测试Demo ———————————————— 版权声明:本文为CSDN博主「NIO4444」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
一、Topic管理
1、创建topic
2、新增partition
注:topic一旦创建,partition只能增加,不能减少
3、删除topic
4、查看topic列表
5、查看topic详细信息
Partition是分区编号,Leader,Replicats和Isr里是broker_id,而broker_id是在$KAFKA_HOME/config/server.properties里配置的
6、查看某个topic的message数量
二、consumer管理
1、查看consumer Group列表
2、查看指定group.id的消费情况
结果:
CURRENT-OFFSET:当前消费偏移量
LOG-END-OFFSET:末尾偏移量
3、删除group
4、重置offset
1、要求修改的group不能active,查看是否activ
2、重置命令
3、导出offset
三、动态配置
1、再平衡
四、生产消费者
1、启动kafka
2、创建消费者
3、创建生产者
五,模拟测试
kafka-manager
kafka-manager,现在叫做CMAK,后来发现滴滴开源的kafka-manager,功能更丰富。看了下它的架构图和源码,还是很值得参考和借鉴的。
让我们来看看didi kafka-manager官网介绍的功能:
一站式 ApacheKafka集群指标监控与运维管控平台
didi参考文档 https://github.com/didi/Logi-KafkaManager/blob/master/docs/install_guide/install_guide_cn.md
CMAK 参考文档 https://www.cnblogs.com/frankdeng/p/9584870.html
kafka-manager 项目地址:https://github.com/yahoo/kafka-manager
参考文章
原文链接:https://blog.csdn.net/VIP099/article/details/105647966
更多安装文章;https://segmentfault.com/a/1190000012730949
配置文件讲解:https://www.cnblogs.com/sandea/p/12078442.html
思路讲解:https://juejin.cn/post/6844903847844904973
基于Kubernetes部署Kafka集群 https://blog.csdn.net/l1028386804/article/details/106773932
阿里云官方安装k8s-kafka https://blog.51cto.com/u_14783669/2666234
kafkamanager管理工具 https://www.cnblogs.com/kevingrace/p/14412024.html
Last updated