This question already has an answer here:
That is not unusual for a Poisson GLM: The Poisson GLM is a model used when the response variable is discrete (specifically, a non-negative integer), and often the explanatory variables are continuous. With this type of data and model it is not unusual to get lines of residual points that correspond to particular discrete response values, but with varying explanatory variables. In your initial residual plot, each of those lines of residuals corresponds to a particular value of the response variable, and the variation in the lines reflects the variation in the continuous explanatory variables. As you can see, the model has fit these lines so that it gives a residual mean that is roughly zero. That is exactly what you would expect from a Poisson GLM.
In this particular case there is not really any clear evidence to diagnose a model departure (though you might want to try some other related models as alternatives). For a Poisson GLM with a small number of response values we do not generally expect the deviance residuals to be normally distributed. From your plots it looks like there are only 8-10 outcomes for the response variable in your data, so the clear lines of residuals, and corresponding "kinky" QQ-plot are to be expected. If you want to test the fit of your model you could use a negative binomial GLM to generalise your analysis, to see if there is any over-dispersion.
These standard residual plots can be difficult to make sense of. It might be easier to explore plots of standardized residuals simulated from your fitted model. If your glm model object is called mod.glm, then:
install.packages("DHARMa") library(DHARMa) res.sim <- simulateResiduals(mod.glm) plotSimulatedResiduals(res.sim) # or plot(res.sim)
See http://www.flutterbys.com.au/stats/tut/tut10.6a.html for a detailed example.
For a correctly specified Poisson regression model, you would expect a uniform (flat) distribution of the simulated residuals (not a normal distribution).
The last command listed above creates a qq-plot to detect overall deviations from the expected (uniform) distribution, and a plot of the residuals against the fitted values. As explained at https://cran.r-project.org/web/packages/DHARMa/vignettes/DHARMa.html, the latter plot is accompanied by the fitted 0.25, 0.5 and 0.75 quantile regression lines; these lines "provide a visual aid in detecting deviations from uniformity in y-direction" (where y refers to the response variable in the Poisson regression model). "These lines should be straight, horizontal, and at y-values of 0.25, 0.5 and 0.75. Note, however, that some deviations from this are to be expected by chance, even for a perfect model, especially if the sample size is small."
You could also plot the simulated residuals against each of the predictor variables in your model:
In these plots of residuals against each predictor, you would expect uniformity in the y direction if the Poisson regression model is correctly specified.
You can also test for overdispersion, zero-inflation, etc., using functions available in the DHARMa package.