Maxwell: Despues De 1 Mes De Uso
Llevo casi 1 mes de uso en produccion de Maxwell, usandolo para proveer a los de lo reportes chachis (BI y Marketing) y esto es lo que he aprendido
Va a ser una enumeracion rapida, si no sabeis que es Maxwell, aqui teneis el enlace a mi entrada del blog donde lo cuento.
Actualizacion
Se actualiza muy a menudo. En la ultima actualizacion han deprecado la forma de filtrar las bases de datos y tablas y no aparece por ningun lado. El nuevo sistema de filtrado te da mas flexibilidad pero cambia la forma de configurarlo
Bootstrapping
Es el proceso de importar una tabla desde el principio, te permite meter una condicion e importar segun un campo. Nosotros lo estamos usando a diario y va muy bien. Una vez que tienes domado el insert que necesitas, es rapido y efectivo.insert into maxwell.bootstrap (database_name, table_name, where_clause, client_id) values ('database', 'table', 'timestamp >="2018-06-19"','kafka-2.pro2.domain.tld')
Sencillez
Es muy muy sencillo, tan sencillo que yo cada vez que hago un cambio, me lo cargo y lo vuelvo a copiar y configurar. Permite que puedas automatizarlo muy muy muy mucho con Ansible
Solidez
Que carajo, pense que iba a ser un churro, que iba a fallar con MariaDB o que iba a ir como el orto. Nada mas alejado de la realidad. Para ser algo tan critico y tan indie, funciona muy muy muy bien. Y por el momento no la ha cagado estrepitosamente.
Se desconecta
Si, cada tiempo aleatorio tenemos mensajes como estos en el log:
21:03:57,566 ERROR TaskManager - cause:
java.util.concurrent.TimeoutException: BinaryLogClient was unable to connect in 5000ms
at com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:817) ~[mysql-binlog-connector-java-0.16.1.jar:0.16.1]
at com.zendesk.maxwell.replication.BinlogConnectorReplicator.startReplicator(BinlogConnectorReplicator.java:121) ~[maxwell-1.14.7.jar:1.14.7]
at com.zendesk.maxwell.replication.BinlogConnectorReplicator.beforeStart(BinlogConnectorReplicator.java:126) ~[maxwell-1.14.7.jar:1.14.7]
at com.zendesk.maxwell.util.RunLoopProcess.runLoop(RunLoopProcess.java:23) ~[maxwell-1.14.7.jar:1.14.7]
at com.zendesk.maxwell.Maxwell.startInner(Maxwell.java:202) ~[maxwell-1.14.7.jar:1.14.7]
at com.zendesk.maxwell.Maxwell.start(Maxwell.java:152) ~[maxwell-1.14.7.jar:1.14.7]
at com.zendesk.maxwell.Maxwell.main(Maxwell.java:223) ~[maxwell-1.14.7.jar:1.14.7]
21:03:57,572 INFO TaskManager - Stopping: com.zendesk.maxwell.schema.PositionStoreThread@19bbc32e
21:03:57,572 INFO StoppableTaskState - com.zendesk.maxwell.schema.PositionStoreThread requestStop() called (in state: RUNNING)
21:03:57,573 INFO TaskManager - Stopping: com.zendesk.maxwell.producer.MaxwellKafkaProducerWorker@552a0433
21:03:57,573 INFO StoppableTaskState - MaxwellKafkaProducerWorker requestStop() called (in state: RUNNING)
21:03:57,576 INFO KafkaProducer - Closing the Kafka producer with timeoutMillis = 9223372036854775807 ms.
21:03:57,581 INFO TaskManager - Stopping: com.zendesk.maxwell.replication.BinlogConnectorReplicator@5536e953
21:03:57,581 INFO StoppableTaskState - com.zendesk.maxwell.replication.BinlogConnectorReplicator requestStop() called (in state: RUNNING)
21:03:57,581 INFO TaskManager - Stopping: com.zendesk.maxwell.monitoring.MaxwellHTTPServerWorker@5a4b4bbf
21:03:57,587 INFO ServerConnector - Stopped ServerConnector@1c5fae34{HTTP/1.1}{0.0.0.0:9311}
21:03:57,589 INFO ContextHandler - Stopped o.e.j.s.ServletContextHandler@fdd5a23{/,null,UNAVAILABLE}
java.util.concurrent.TimeoutException: BinaryLogClient was unable to connect in 5000ms
at com.github.shyiko.mysql.binlog.BinaryLogClient.connect(BinaryLogClient.java:817)
at com.zendesk.maxwell.replication.BinlogConnectorReplicator.startReplicator(BinlogConnectorReplicator.java:121) at com.zendesk.maxwell.replication.BinlogConnectorReplicator.beforeStart(BinlogConnectorReplicator.java:126)
at com.zendesk.maxwell.util.RunLoopProcess.runLoop(RunLoopProcess.java:23)
at com.zendesk.maxwell.Maxwell.startInner(Maxwell.java:202)
at com.zendesk.maxwell.Maxwell.start(Maxwell.java:152)
at com.zendesk.maxwell.Maxwell.main(Maxwell.java:223)
Y se puede pegar un buen rato intentando conectar, aunque siempre lo hace. Es totalmente aleatorio y no encuentro razon para ello. La version 1.14.7 ha mejorado mucho contra la 1.14.0, la cual directamente ni conectaba al Maxscale.
Por el momento, no es critico ya que no tenemos tantas transacciones de MariaDB que meter en Kafka, pero si tuvieramos muchas quizas si seria un problema. Realmente, esto es lo que mas me preocupa.
La metricas no son lo mejor del mundo
Tiene metricas y te las expone (estoy trabajando en un playbook que lo instale listo para prometheus) pero tienes que tirar de un JsonExporter de GO que hay que compilar y es un poco escueto el tema. Sin eso, JBeans abrupto y arido que te las tienes que ingeniar para meter en Prometheus, pero oye….tener metricas las tiene
Conclusion
Honestamente, no daba un duro por ello y me ha sorprendido gratamente. Tan gratamente que YA lo tenemos en produccion y es critico. Si se rompe, lo arreglas y ejecutas un bootstrap: listo.
Su mayor ventaja, su sencillez….y encima cumple.
Yo lo recomiendo si estais en la misma tesitura.