# kafka-study **Repository Path**: scpjdk/kafka-study ## Basic Information - **Project Name**: kafka-study - **Description**: No description available - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2024-01-20 - **Last Updated**: 2024-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # kafka-study ## 环境信息 ## 具体操作步骤 参考https://blog.csdn.net/y393016244/article/details/126405864 ### 一、docker安装kafka docker run -d --name kafka-server \ --network app-tier \ -p 9092:9092 \ -e ALLOW_PLAINTEXT_LISTENER=yes \ -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \ -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.2.135:9092 \ bitnami/kafka:latest docker run -d --name arm64v8/zookeeper \ --network app-tier \ -e ALLOW_ANONYMOUS_LOGIN=yes \ arm64v8/zookeeper:latest ### 二、run ``` docker run -d --name kafka-server \ --network app-tier \ -p 9092:9092 \ -e ALLOW_PLAINTEXT_LISTENER=yes \ -e KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper-server:2181 \ -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.0.101:9092 \ bitnami/kafka:latest ``` KAFKA_CFG_ADVERTISED_LISTENERS 对应 Kafka 的 advertised.listeners 参数用于指定 Kafka broker 对外提供服务的地址和端口号。 在 Kafka 集群中,每个 broker 都有一个监听地址和端口,该地址可以被客户端用于连接和发送消息,而客户端通常是通过 Zookeeper 从集群中获取 broker 的地址信息。 参考https://www.jianshu.com/p/26495e334613 advertised.listeners如何配置,有什么作用,如何让外部访问到容器中的kafka 参考https://www.toutiao.com/article/7234389087497568801/?upstream_biz=doubao&source=m_redirect 各参数 结论,容器中的kafka advertised.listeners 填宿主机ip就行了,瞎填的话会报错 ![kafkamap-run.png](images/kafkamaprun.png) ### 三、kafka终端操作 ![kafka命令行程序.png](images/kafka命令行程序.png) kafka/bin目录下 ``` ./kafka-topics.sh --list --bootstrap-server localhost:9092 查看主题 ./kafka-topics.sh --create --zookeeper zookeeper:2181 --replication-factor 1 --partitions 8 --topic test Created topic test 创建主题 ./kafka-console-producer.sh --broker-list localhost:9092 --topic test0 发送消息 ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test0 订阅主题 ``` kafka map地址 http://192.168.2.135:9001/ ### 四、kafka基础概念 主题 Broker 消费组 offset 在 Kafka 中,`offset`是一个针对单个分区的概念。每个分区中的消息都会被分配一个唯一的编号,即`offset`,用于标识该分区中唯一的消息。`offset`的顺序不跨分区,只保证在同一个分区内的消息是有序的,不同的分区内消息的`offset`可能是相同的。 ![offset.png](images/offset.png) 对于消费者来说,每次消费了分区内一个消息并且提交以后,就会保存当前消费了的最近的一个`offset`记录,不会再去消费已经消费过了的消息。 分区Partition: 分区,为了实现扩展性,一个非常大的Topic可以分布到多个Broker上,一个Topic可以分为多个Partition,每个Partition是一个有序的队列(分区有序,不能保证全局有序) 副本Replica: 副本Replication,为保证集群中某个节点发生故障,节点上的Partition数据不丢失,Kafka可以正常的工作,Kafka提供了副本机制,一个Topic的每个分区有若干个副本,一个Leader和多个Follower key: 自动提交手动提交 ### 五、kafka代码操作 1、原生java操作kafka 参考 https://blog.csdn.net/weixin_45565886/article/details/127788324?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170584394416800215065590%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170584394416800215065590&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-127788324-null-null.142^v99^control&utm_term=java%E6%93%8D%E4%BD%9Ckafka&spm=1018.2226.3001.4187 2、springboot操作kafka 参考 https://blog.csdn.net/kongliand/article/details/109236996?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170584529916800222839180%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=170584529916800222839180&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-109236996-null-null.142^v99^control&utm_term=springboot%E6%93%8D%E4%BD%9Ckafka&spm=1018.2226.3001.4187 Kafka消费不到数据/消费者没有反应 https://blog.csdn.net/hxc2101/article/details/114444765 ### 六、kafka应用 1、异步操作 2、解藕 3、削峰 ### kafka原理