作者回复: advertised.listeners主要是为外网访问用的。如果clients在内网环境访问Kafka不需要配置这个参数。
常见的玩法是:你的Kafka Broker机器上配置了双网卡,一块网卡用于内网访问(即我们常说的内网IP);另一个块用于外网访问。那么你可以配置listeners为内网IP,advertised.listeners为外网IP。
作者回复: 搜了一下,像是Oracle GoldenGate Kafka Adapter的参数。我没有用过,从文档中看这两者的区别是:当设置成op单个数据库表的变更(插入、更新、删除)会被当成一条Kafka消息发送;当设置成tx时,数据库事务所做的所有变更统一被封装进一条Kafka消息,并在事务提交后被发送。
显然,后者有事务性的保障,至少有原子性方面的保证,不会丢失部分CDC数据。
作者回复: 不太懂“删除topic后还出现重复消费”是什么意思?删完了还要继续消费它吗?
当consumer启动后它会从Kafka读取它上次消费的位移。情况1: 如果 Kafka broker端没有保存这个位移值,那么consumer会看auto.offset.reset的脸色
情况2:consumer拿到位移值开始消费,如果后面发现它要读取消息的位移在Kafka中不存在(可能对应的消息已经被删除了),那么它也会看auto.offset.reset的脸色
情况3:除以上这两种情况之外consumer不会再顾忌auto.offset.reset的值
怎么看auto.offset.reset的脸色呢?简单说就是earliest从头消息;latest从当前新位移处消费。
作者回复: 只有一个broker有数据进出,我猜是因为这样的原因:1. 首先你的主题分区副本数是1;2. 在你升级的过程中所有分区的Leader副本都变更到了同一台broker上。
后面开启了auto.leader.rebalance.enable=true之后它定期将Leader副本分散到不同broker上了。
作者回复: 可以试试Kafka 0.11引入的事务
作者回复: 首先,CAP理论有很多有歧义的地方,我很好奇为什么国内很多人追捧CAP,其实对于分布式系统而言,很多一致性问题都是CAP覆盖不了的。
其次,我个人觉得饶大神并不是说Kafka放弃了P,其实Kafka是依托于ZooKeeper以及合理配置minIsr等参数来规避脑裂的。
第三,我翻看了社区对此提案的讨论,变更为false就是很朴素的思想:用户在默认情况下可能更加关心数据一致性,不想数据丢失。如果用户想要更高的可用性,手动调整即可。你可以看看社区对此问题的讨论:https://www.mail-archive.com/dev@kafka.apache.org/msg63086.html
作者回复: 1. 的确是有个比例,要超过这个比例才会触发preferred leader选举。这个比例由broker端参数leader.imbalance.per.broker.percentage控制,默认是10%。举个例子,如果一个broker上有10个分区,有2个分区的leader不是preferred leader,那么就会触发
2. 没太明白为什么写到100GB,broker就不能继续写入了?
作者回复: 不会啊,broker会重建副本,然后走正常的同步机制:从leader处拉取数据。
作者回复: 同意。不过实际上,线上环境贸然大面积迁移副本leader是非常有风险的事情:)
作者回复: leader挂掉了Kafka会从ISR剩下的副本中选择一个当leader,但如果ISR也没有副本了,leader就选不出来了。如果设置unclean.leader.election.enable=true,则允许Kafka从那些不在ISR但依然存活的副本中选择一个出来当leader。此时是有数据丢失的风险的
作者回复: 如果只是偶尔抛出不用管,通常是因为没有找到对应的主题所致。不是参数配置错导致
作者回复: 不会。已有数据将一直“躺在”原有分区中。
作者回复: 可能有点没说清楚。
1. Broker自动在好的路径上重建副本,然后从leader同步;
2. Kafka支持工具能够将某个路径上的数据拷贝到其他路径上
作者回复: 它们是异步拉取消息的,必然有一个时间窗口导致它和leader中的数据是不一致的,或者说它是落后于leader的。
作者回复: 感谢反馈,sorry,笔误了:(
作者回复: Broker会在好的目录上重建副本。另外Kafka也提供了工具将某块磁盘上的数据直接搬移到另一个磁盘上,毕竟磁盘坏了也不是不能修好:)
作者回复: 后面讲到producer和consumer会有涉及,但不会专门来讲,毕竟很多人反映单纯讲配置参数太枯燥了,还是结合具体的使用场景来讲比较好。另外建议delete.topic.enable保持默认值true就好,毕竟不能删除topic总显得不太方便。只是要注意权限设置即可,不可能 让任何人都能有删除topic的权限。
作者回复: 简单来说,就是1.1版本之前,如果Kafka使用的任何一块硬盘坏掉了,Broker就会宕机。1.1版本之后不会了~