It's an OpenGL rasterization issue and quite tricky to get around it.
The most simplest way would be to add a 1px "border" around each tile, that way you at least won't get artifacts from other tiles, even though you still might get some lines that don't fully match up.
Other solutions include, rounding all tiles to integers. Using only certain zooming steps (power by 2 or similar), adding some random floating point values to each tile, etc.
There are quite a few similar topics on the forum and the web, might want to search a bit to find some more information.