我在使用Confluent JDBC连接器时遇到了相当奇怪的行为。我很确定它与Confluent堆栈无关,而是与Kafka-connect框架本身无关。
因此,我将offset.storage.file.filename
属性定义为默认/tmp/connect.offsets
并运行我的接收器连接器。显然,我希望连接器在给定文件中保持偏移量(它在文件系统中不存在,但它应该自动创建,对吧?)。文档说:
offset.storage.file.filename
要存储连接器偏移量的文件。通过在磁盘上存储偏移量,可以在单个节点上停止并启动独立进程,并从之前停止的位置继续。
但卡夫卡表现得完全不同。
这是一个错误,或者更可能的是,我不明白如何使用这种配置?我理解两种保持偏移的方法之间的区别,文件存储更方便我的需要。
答案 0 :(得分:2)
offset.storage.file.filename
仅用于源连接器。它用于在输入数据源上放置书签,并记住它停止读取的位置。创建的文件包含文件行号(对于文件源)或表行号(对于jdbc源或一般而言的数据库)之类的东西。
在分布式模式下运行Kafka Connect时,该文件将替换为默认命名为connect-offsets
的Kafka主题,应将其复制以容忍失败。
就 sink 连接器而言,无论使用哪种插件或模式(独立/分布式),它们都存储在上一次停止读取其输入主题的内部主题{{ 1}}就像任何Kafka消费者一样。这样就可以使用__consumer_offsets
命令行工具之类的传统工具,接收器连接器滞后多少。
Confluent Kafka replicator尽管是源连接器,但可能是一个例外,因为它从远程Kafka读取并且可能使用Kafka使用者。
我同意文档尚不清楚,无论连接器类型是什么(源或接收器),此设置都是必需的,但仅由源连接器使用。该设计决定背后的原因是,单个Kafka Connect工作程序(我的意思是单个JVM进程)可以运行多个连接器,可能同时包括源连接器和接收器连接器。换句话说,此设置是工作人员级别设置,而不是连接器设置。
答案 1 :(得分:0)
属性public class IDbServiceImpl<T> implements IDBService<T>{
@Autowired
GenericRepository<T, Serializable> genericRepository;
@Override
public T create(T object) {
return genericRepository.save(object);
}
仅适用于以独立模式运行的工作程序。如果您在Kafka主题中看到Kafka持久偏移,则表明您正在以分布式模式运行。您应该使用提供的脚本offset.storage.file.filename
启动连接器。有不同模式$unwind
的描述。有关在不同模式下运行的说明是here。