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 ...
随机推荐
- fcntl 加锁模块
#!/usr/bin/python # coding:utf8 import os import sys import time import fcntl # 导入模块 class FLOCK(obj ...
- Open-UI序言
Open_UI-----序言 在单片机开发的时候,我们时常需要一个足够开放的,体积足够小巧,且移植性较高的UI库来显示信息,从而做到非常优秀的人机交互效果.而我试过的UI库如下: LVGL 这是目 ...
- centos使用docker安装ActiveMQ
拉取镜像 docker pull webcenter/activemq 启动镜像 docker run --name=activemq -itd -p 8161:8161 -p 61616:61616 ...
- Linux(Centos)安装中文字体库(文档中文字符不显示)
yum -y install fontconfig 在/usr/shared/fonts目录下新建一个目录chinese 然后打开windows本地的字体库 将这里面的所有文件上传到centos里我们 ...
- Linux宝塔面板部署运行jar包
登录面板 安装插件 把jar包上传上去 设置jar包 填写项目启动的端口 然后点击确定 会自动启动 然后浏览器打开 ip:端口 即可
- 【LeetCode】820. 单词的压缩编码 Short Encoding of Words(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode-cn.com/problems/short- ...
- Anniversary party(hdu1520)
Anniversary party Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Test for Job(poj3249)
Test for Job Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 10209 Accepted: 2372 Des ...
- html2canvas 返回的toDataURL()数据为 data:,的解决方法
1.使用的场景是把html转换成PDF保存下来,代码: /* eslint-disable */ import html2canvas from 'html2canvas'; import JsPDF ...
- [opencv]<学习Opencv>英文原版翻译学习
[注]下文全部内容为 <<Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library>>经由在线翻译整理 ...