kafka入门(采坑)笔记
前言
之前在工作和学习过程中也会有记笔记的习惯,但是没有发布出来,也因最近各方面的瓶颈急需突破和提升,所以还是要很积极的融入大环境大生态中,好废话不多说,说下这次遇到的问题
第一步启动zk
根据教程安装了zookeeper(非kafka自带)并启动成功 ,查看节点等,没有问题
第二步下载kafka安装包并解压
上传kafka 安装包
下载 1.0.0版本并解压缩。
> tar -xzf kafka_2.11-1.0.0.tgz
> cd kafka_2.11-1.0.0
第三步启动kafka服务器
建议启动前查看server.properties 配置文件是否有误
/kafka-server-start.sh config/server.properties
输出如下表示启动brokerId 的节点成功
第四步创建topic
创建一个名为“test”的topic,它有一个分区和一个副本:
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
命令来查看这个topic:
bin/kafka-topics.sh --list --zookeeper localhost:2181
test
第五步发送消息到topic
Kafka自带一个命令行客户端,它从文件或标准输入中获取输入,并将其作为message(消息)发送到Kafka集群。默认情况下,每行将作为单独的message发送
运行 producer,然后在控制台输入一些消息以发送到服务器。
> bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
This is a message
This is another message
第六步 启动客户端
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
This is a message
This is another message
到现在为止单节点的kafka 基本上就这些操作,接下来记录些遇到的问题主要是在单节点多broker 上
首先是copy配置文件
> cp config/server.properties config/server-1.properties
> cp config/server.properties config/server-2.properties
然后修改端口 和其他属性
config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dir=/tmp/kafka-logs-1
config/server-2.properties:
broker.id=2
listeners=PLAINTEXT://:9094
log.dir=/tmp/kafka-logs-2
启动后发现一个问题,至今没有解决 就是查看topic 等命令不报错,也没有回显
不过问题不大,功能正常,然后尝试使用程序连接
第七步导入依赖
<!--引入kafka依赖-->
<dependency>
<groupId>org.springframework.kafka</groupId>
<artifactId>spring-kafka</artifactId>
</dependency>
**在这里千万注意引入的客户端依赖的版本第一次引入了1.0的版本结果各种报错类找不到**
<!--引入kafka 客户端和服务端api依赖-->
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>2.3.1</version>
</dependency>
第八步配置文件
spring:
kafka:
bootstrap-servers: 服务器ip:9092 #服务其端口一定要开放
producer:
# 发生错误后,消息重发的次数。
retries: 0
#当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
batch-size: 16384
# 设置生产者内存缓冲区的大小。
buffer-memory: 33554432
# 键的序列化方式
key-serializer:
org.apache.kafka.common.serialization.StringSerializer
# 值的序列化方式
value-serializer:
org.apache.kafka.common.serialization.StringSerializer
# acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。
# acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。
# acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。
acks: 1
consumer:
# 自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D
auto-commit-interval: 1S
# 该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:
# latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)
# earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录
auto-offset-reset: earliest
# 是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量
enable-auto-commit: false
# 键的反序列化方式
key-deserializer:
org.apache.kafka.common.serialization.StringDeserializer
# 值的反序列化方式
value-deserializer:
org.apache.kafka.common.serialization.StringDeserializer
listener:
# 在侦听器容器中运行的线程数。
concurrency: 5
#listner负责ack,每调用一次,就立即commit
ack-mode: manual_immediate
missing-topics-fatal: false
在这里一定要注意 序列化接口类,这个官网上说的是 org.apache.kafka.common.serialization.Serializer接口,但是随着版本不同,接口可能不一样,网上也是多种多样,
接下来实现序列化接口即可
package com.example.kafka_study;
import org.apache.kafka.common.errors.SerializationException;
import org.apache.kafka.common.serialization.Serializer;
import java.io.UnsupportedEncodingException;
import java.util.Map;
/**
* @Description: 序列化接口
* @Author: Jingqi Qu
* @CreateDate: 2021/3/16 11:46
* @UpdateUser:
* @UpdateDate:
* @Version: [v1.0]
*/
public class Myseria implements Serializer<String> {
private String encoding =
"UTF8";
@Override
public void configure(Map map,
boolean b) {
}
@Override
public byte[] serialize(String s,
String data) {
try {
// 如果数据为空,那么直接返回null即可
if (data == null)
return null;
else
// 否则将String序列化,即转为byte[]即可
return data.getBytes(encoding);
} catch
(UnsupportedEncodingException e) {
throw new
SerializationException("Error when serializing string to byte[] due to
unsupported encoding " + encoding);
}
}
@Override
public void close() {
}
}
最后使用 KafkaTemplate 调用固定API即可
总结:
1、服务器防火墙关闭
2、服务器端口9092 开放 同时建议开放zk 2181 端口
3、客户端版本一定要适配
4、配置文件要根据kafka版本来配置
listeners 有的 配置0.0.0.0 有的配置 127.0.0.1 其实对于kafka版本是不一样的,会引发一些错误
另外
advertised.listeners
需要配置服务器ip + kafka端口 (供外部访问)
结束~~~~~~~~~~~~~~
kafka入门(采坑)笔记的更多相关文章
- spark streaming 消费 kafka入门采坑解决过程
kafka 服务相关的命令 # 开启kafka的服务器bin/kafka-server-start.sh -daemon config/server.properties &# 创建topic ...
- 从源码看Spring Security之采坑笔记(Spring Boot篇)
一:唠嗑 鼓捣了两天的Spring Security,踩了不少坑.如果你在学Spring Security,恰好又是使用的Spring Boot,那么给我点个赞吧!这篇博客将会让你了解Spring S ...
- ASP.NET+MVC入门踩坑笔记 (一) 创建项目 项目配置运行 以及简单的Api搭建
哈喽各位 我又回来了! 前段时间研究了下ASP.NET,刚开始也是随便找网上的各种教程来看,但是鉴于本人技术有限,还是走了相当长的一段弯路的.所以我写下了这篇文章.希望各位刚刚入坑的ASP.NET开发 ...
- react采坑笔记
1. dva + antd input设置defaultVaule时查看时inpu有值但是页面上不显示 解决办法 设置一个key值,当key值改变从新渲染 <div key={this.prop ...
- Hibernate各种基本注解及一对一(多)关系映射采坑笔记
hibernate提供两种方式配置关系映射,一种XMl配置,一种注解.SpringBoot已经自带了hibernate注解方式,我也是特别喜欢使用注解,特此记下常用的知识点. 1.基本注解 @Tabl ...
- 采坑笔记——mysql的order by和limit排序问题
背景说明 今天写出一个十分弱智的bug,记录一下,提醒自己以后别这种犯错,不怕丢人哈~ 在写一个分页查询记录的sql时,要根据添加的时间逆序分页输出,之前的写法是酱紫 select record.a, ...
- mysql采坑笔记
mysqld --initialize-insecure // 初始化数据 mysql -u root -p // 登录 navicat for mysql 1251错误解决方法 ALTER USER ...
- cube+FreeRTOS联合开发采坑笔记
加了看门狗之后不断重启的可能 原因: 任务容量分配不足,在"FreeRTOSConfig.h"的配置中,有个configTOTAL_HEAP_SIZE中将堆大小调到最大.
- kafka 入门笔记 #1
kafka 入门笔记(#1) 单机测试 下载版本,解压 tar -xzf kafka_2.11-0.10.1.1.tgz cd kafka_2.11-0.10.1.1 启动服务 Kafka用到了Zoo ...
随机推荐
- 一站式云原生在线研发平台 StarOS 种子用户邀请计划正式开启!
云时代的开发者,你好: 你是否也曾畅想过,关于云的未来? 不是作为消费者,也不是作为企业,是对于开发者而言,云会变成什么样. 同为开发者,我们常在想,我们开发了一个又一个应用,让太多人因服务在线而获益 ...
- 往docker中的mysql导入sql文件
先把sql文件上传到服务器 然后拷贝sql文件到docker中的mysql 容器中 docker cp test.sql mysql:/test.sql 这里的mysql都是容器名称 根据自己的来 用 ...
- vue-子组件创建/注册/使用流程
流程分为三步 非单文件组件:(实际不用,因为很麻烦,框架都是多文件组件) 局部注册 1.创建一个组件 const school = Vue.extend({ // 传入配置对象 // 子组件配置对象不 ...
- 【LeetCode】969. Pancake Sorting 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 模拟法 日期 题目地址:https://leetco ...
- 【LeetCode】621. Task Scheduler 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 公式法 日期 题目地址:https://leetco ...
- D. Water Tree
D. Water Tree time limit per test 4 seconds memory limit per test 256 megabytes input standard input ...
- 1007 - Mathematically Hard
1007 - Mathematically Hard PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 6 ...
- 关于python常用的命令
os模块: os.system os.system("cat/cmd等...") os.popen print os.popen("adb shell ls ../aa. ...
- ZOJ 3785:What day is that day?(数论)
What day is that day? Time Limit: 2 Seconds Memory Limit: 65536 KB It's Saturday today, what day is ...
- 写了个适用于vscode的minio图床客户端插件
缘起 自己搭建minio做我的个人博客图床好一段时间了, 一直用minio自带的web管理后台来上传图片, 它的界面长下面这个样子 上传完后, 需要点下文件列表里刚刚传上去的文件的分享按钮 然后会出来 ...